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

如何使Seaborn热力图子图间的单元格尺寸保持一致?

如何让Seaborn热力图子图的单元格尺寸一致?

这个问题的核心是让两个子图的高度和各自的行数成比例,再结合sharex=True保证宽度一致,这样每个单元格的宽高就能完全匹配了。

具体做法很简单,我们可以通过gridspec_kw参数给两个子图设置高度比例,比例值就是各自数据的行数之比。修改后的代码如下:

import matplotlib.pyplot as plt
import seaborn as sns

# 定义两个数据集
data_a = [
 [0,0,0],
 [0,0,0],
 [0,0,0],
 [0,0,0],
 [0,0,0],
 [0,0,0],
 [0,0,0],
]
data_b = [
 [0,0,0],
 [0,0,0],
 [0,0,0],
]

# 计算行数比例,用来设置子图高度
row_ratio = [len(data_a), len(data_b)]
fig, axes = plt.subplots(2, 1, sharex=True, figsize=(5,10), gridspec_kw={'height_ratios': row_ratio})

# 绘制热力图
sns.heatmap(data_a, ax=axes[0], linewidths=0.2, cbar=False)
sns.heatmap(data_b, ax=axes[1], linewidths=0.2, cbar=False)

# 设置标题
axes[0].set_title("A")
axes[1].set_title('B')

plt.tight_layout()
plt.show()

原理说明:

  • 默认情况下,plt.subplots(2,1)会把整个图的高度平均分给两个子图,这就导致行数多的子图A的单元格高度更小,行数少的子图B单元格高度更大。
  • 我们通过height_ratios设置子图高度为7:3(对应data_a的7行和data_b的3行),这样每个子图的高度除以自身行数后,得到的单元格高度是完全一致的。
  • 加上sharex=True保证了两个子图的宽度相同,所以每个单元格的宽度也一致,最终实现了跨子图的单元格尺寸统一,同时子图A也会因为行数多而整体更大,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Mitchell van Zuylen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:37:40