You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成行高一致、宽度相同的不同尺寸Seaborn热力图

解决热力图尺寸不一致问题

要实现宽度统一、单元格高度固定、仅随行数调整整体高度的效果,关键是精准计算画布高度,同时规避布局和保存顺序的问题,以下是修改后的代码和说明:

核心调整点

  • 固定每个单元格的高度,画布高度 = 单元格高度 × 行数 + 标题/刻度的额外预留空间(避免标题、刻度被裁剪)
  • 为每张图生成唯一文件名,防止文件覆盖
  • 调整布局与保存的执行顺序,消除尺寸偏差

修改后的代码

import matplotlib.pyplot as plt
import seaborn as sns

def plot_heatmap(df, idx):
    # 固定单元格高度,可根据字体、标注内容调整(推荐0.3-0.5英寸)
    cell_height = 0.4
    # 计算画布高度:单元格总高度 + 标题/顶部预留空间
    fig_height = cell_height * len(df.index) + 1.5
    # 固定宽度为10英寸,高度随行数动态计算
    fig, ax = plt.subplots(figsize=(10, fig_height))
    
    sns.heatmap(
        df,
        vmin=0,
        vmax=1,
        cmap='coolwarm',
        annot=True,
        fmt='.3f',
        linewidths=.5,
        cbar=False,
        yticklabels=True,
        annot_kws={'alpha': 0.25},
        ax=ax
    )

    # 移除轴标签,保留刻度
    ax.set_ylabel('')
    ax.set_xlabel('')
    ax.set_title('Some Title')
    
    # 先调整布局再保存,避免内容被裁剪
    plt.tight_layout()
    # 用索引生成唯一文件名,防止覆盖
    plt.savefig(
        f'heatmap_{idx}.png',
        dpi=300,
        bbox_inches='tight'
    )
    plt.show()
    plt.close()  # 关闭画布,释放内存

# 遍历生成热力图,传入索引确保文件名唯一
for idx, df in enumerate(group_dfs):
    plot_heatmap(df, idx)

额外说明

  • cell_height:可根据实际显示效果微调,确保单元格内的标注、刻度文字不拥挤
  • plt.close():循环生成多张图时关闭画布,避免内存占用过高
  • 若标题或刻度仍有裁剪,可增大fig_height中的额外预留空间(比如改为2.0)

内容的提问来源于stack exchange,提问作者user9996043

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:28:17