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

如何让Seaborn热力图的Y轴刻度覆盖整个图表范围?

解决Seaborn热力图Y轴刻度无法覆盖全范围的问题

你的问题出在Y轴刻度位置的设置上:yticks = np.arange(num_yticks)只覆盖了Y轴前半段的位置(因为num_yticks = int(num_freqs/2)),导致热力图的显示范围被截断,看起来只覆盖了一半图表。

修正后的代码

num_freqs = data.shape[0]  # 获取数据的总行数,确保对应热力图Y轴的完整范围
num_yticks = int(num_freqs / 2)

# 生成覆盖Y轴全范围的刻度位置:从0到最后一行的索引,均匀选取num_yticks个点
ytick_positions = np.linspace(0, num_freqs - 1, num_yticks, dtype=int)
# 生成你需要的对数刻度标签
ytick_labels = np.logspace(np.log2(2), np.log2(150), num=num_yticks, base=2, dtype=np.float16)

# 绘制热力图,先关闭默认Y轴标签
sns.heatmap(data, ax=axs[0][0], vmin=-.4, vmax=.4, yticklabels=False,
            cbar_kws={"label": "Frequency Power"}, cmap='PRGn')

# 手动设置Y轴刻度位置和对应标签
axs[0][0].set_yticks(ytick_positions)
axs[0][0].set_yticklabels(ytick_labels)

# 反转Y轴(保持你的原有需求)
axs[0][0].invert_yaxis()

关键说明

  1. 刻度位置要覆盖全范围:用np.linspace生成从0到num_freqs-1的均匀位置,确保刻度对应热力图的每一行,不会只停留在前半段。
  2. 先关闭默认标签再手动设置:避免Seaborn根据标签数量自动截断Y轴范围,导致图表显示不全。
  3. 反转Y轴的时机:放在刻度设置之后,不影响刻度位置与热力图行的对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:12:30