如何生成行高一致、宽度相同的不同尺寸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
相关产品推荐
相关产品推荐

