【问题标题】:Seaborn heatmap reducing cell sizeSeaborn 热图减小了单元格大小
【发布时间】:2017-10-31 17:22:55
【问题描述】:

有没有办法改变 Seaborn 热图的单元格大小? 我找到了this,但无法按预期工作。

所以,我在 y 轴标签中有长文本。由于所有文本都被切掉了,我想将热图的单元格大小缩小得多。我不需要那么大的矩形。 (仅作为示例突出显示。)

(我隐藏了标签名称。)

当我改变图形大小时,

plt.figure(figsize=(8, 6)) or 
figure.set_size_inches(12, 12) 

单元格也变得更大,因此文本仍然被截断。

这里是代码。

sns.set(font_scale=1.2)
ax0 = plt.axes()
ax1 = sns.heatmap(hmap, cbar=0, cmap="YlGnBu",linewidths=2, ax=ax0,vmax=3000, vmin=0)
ax1.set_title('test heatmap')

for item in ax1.get_yticklabels():
    item.set_rotation(0)

for item in ax1.get_xticklabels():
    item.set_rotation(0)

figure = plt.gcf()  # get current figure
figure.set_size_inches(12, 12)
plt.savefig('test.png') , dpi=400)

【问题讨论】:

  • 您是否在sns.heatmap 调用中尝试过square=True 参数?
  • @NathanWatkins 谢谢!这确实有效。你拯救了我的一天!
  • 太棒了!如果您想将其标记为已回答,我会将其发布为答案。
  • 你的问题并不完全清楚,但我认为问题是你想要savefig(..., bbox_inches="tight)
  • 如果你不打算将坐标轴传递给heatmap,那么这样做是没有意义的:ax0 = plt.axes()

标签: python-3.x matplotlib heatmap seaborn


【解决方案1】:

尝试在您的 sns.heatmap 调用中使用 square=True 参数。这会将热图单元格限制为方形纵横比。

ax1 = sns.heatmap(hmap, cbar=0, cmap="YlGnBu",linewidths=2, ax=ax0,vmax=3000, vmin=0, square=True)

【讨论】:

    【解决方案2】:

    您实际上并不想更改单元格大小,但您想缩小轴的大小。解决方法:

    • 使用plt.tight_layout()
    • 为侧面提供更多空间,例如通过fig.subplots_adjust(left=0.4)
    • 创建一个具有所需大小的坐标区ax1 = fig.add_axes([0.4,0.2,0.5,0.6])(其中数字为[left, bottom, width, height],并使用此坐标区绘制热图sns.heatmap(... , ax=ax1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 2021-01-18
      • 2021-09-30
      • 2016-05-09
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      相关资源
      最近更新 更多