Matplotlib - 如何删除颜色条但保持热图位置不变

Posted

技术标签:

【中文标题】Matplotlib - 如何删除颜色条但保持热图位置不变【英文标题】:Matplotlib - How to remove color bar but keep the heatmap position unchanged 【发布时间】:2018-10-31 10:27:24 【问题描述】:

我制作了一个包含 3 个轴的图形。每个轴都是具有相同颜色条的热图。我只想保留第三轴的颜色条并隐藏第一和第二个颜色条(但保持热图位置不变)。我该怎么做?

这是我的代码:

fig=plt.figure()
grid = plt.GridSpec(4, 6)

plt.subplot(grid[0:2,0:5])
ax1=sns.heatmap(df_norm, cmap='Reds', vmin=0.05, vmax=0.7)
ax1.axes.get_yaxis().set_visible(False)
ax1.xaxis.tick_top()
ax1.set_xticklabels(col, rotation=90)

plt.subplot(grid[2,0:5])
ax2=sns.heatmap(df_tgfup, cmap='Reds', vmin=0.05, vmax=0.7)
ax2.axes.get_xaxis().set_visible(False)
ax2.axes.get_yaxis().set_visible(False)
ax2.xaxis.tick_top()
ax2.set_xticklabels(col, rotation=90)

plt.subplot(grid[3,0:5])
ax3=sns.heatmap(df_tgfdown, cmap='Reds', vmin=0.05, vmax=0.7)
ax3.axes.get_xaxis().set_visible(False)
ax3.axes.get_yaxis().set_visible(False)
ax3.xaxis.tick_top()
ax3.set_xticklabels(col, rotation=90)

这是我制作的无花果:

这是我想做的无花果:

【问题讨论】:

在前两个热图语句中尝试cbar=False 我试过了。但这会改变前 2 个热图的位置和大小。 【参考方案1】:

颜色条在图中定义为轴。您可以通过fig.axes访问它们

[<AxesSubplot:>,
 <AxesSubplot:label='<colorbar>'>,
 <AxesSubplot:>,
 <AxesSubplot:label='<colorbar>'>,
 <AxesSubplot:>,
 <AxesSubplot:label='<colorbar>'>]

您可以使用set_visible(False) 方法来隐藏它们:

fig=plt.figure()
grid = plt.GridSpec(4, 6)

df_norm = pd.DataFrame(np.random.randint(0,10,size=(10, 10)), columns=list('ABCDEFGHIJ'))

plt.subplot(grid[0:2,0:5])
ax1=sns.heatmap(df_norm, cmap='Reds', vmin=0.05, vmax=0.7)
ax1.axes.get_yaxis().set_visible(False)
ax1.xaxis.tick_top()
#ax1.set_xticklabels(col, rotation=90)
fig.axes[1].set_visible(False)

plt.subplot(grid[2,0:5])
ax2=sns.heatmap(df_norm, cmap='Reds', vmin=0.05, vmax=0.7)
ax2.axes.get_xaxis().set_visible(False)
ax2.axes.get_yaxis().set_visible(False)
ax2.xaxis.tick_top()
#ax2.set_xticklabels(col, rotation=90)
fig.axes[3].set_visible(False)

plt.subplot(grid[3,0:5])
ax3=sns.heatmap(df_norm, cmap='Reds', vmin=0.05, vmax=0.7)
ax3.axes.get_xaxis().set_visible(False)
ax3.axes.get_yaxis().set_visible(False)
ax3.xaxis.tick_top()
#ax3.set_xticklabels(col, rotation=90)

【讨论】:

【参考方案2】:

您可以将cbar=False 参数传递给sns.heatmap(),只要您想隐藏热图的颜色条。

即,

ax1=sns.heatmap(df_norm, cmap='Reds', cbar=False, vmin=0.05, vmax=0.7)
ax2=sns.heatmap(df_tgfup, cmap='Reds', cbar=False, vmin=0.05, vmax=0.7)

ax3 将保持不变。

那么为了保持子图1和2的位置不变,可以玩plt.subplots_adjust(right=num);其中num 是子图右边缘的位置,作为图形宽度的一部分,您将决定对子图进行所需的调整。

【讨论】:

以上是关于Matplotlib - 如何删除颜色条但保持热图位置不变的主要内容,如果未能解决你的问题,请参考以下文章

绘制排序的热图保持(x,y)值颜色

matplotlib 中的 3D 离散热图

热图与 matplotlib 使用 matshow

Matplotlib / Seaborn:热图的控制线/行高

如何在 GUI pyqt 中更新热图的颜色条?

如何修复 matplotlib 和 seaborn 热图?