matplotlib 如何移动颜色条而不删除热图

of1yzvn4  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(102)

要在栅格中为热图指定子图轴,请执行以下操作:

ax4 = plt.subplot2grid((3, 4), (1, 3), colspan=1, rowspan=1)

要在此轴中创建热图,请执行以下操作:

heatmap = ax4.pcolor(data, cmap=mycm, edgecolors = 'none', picker=True)

要将图向右移动,以便根据其他子图使其在轴中居中,请执行以下操作:

box = ax4.get_position()
ax4.set_position([box.x0*1.05, box.y0, box.width * 1.05, box.height])

显示不带填充的颜色条

fig.colorbar(heatmap, orientation="vertical")

然而,这会导致:

请注意,颜色条位于热图的顶部。
如果我使用pad关键字,我可以移动颜色条,这样它就不会与热图重叠,但是这会减少绘图区域的宽度,即:

我怎样才能保持绘图区域的宽度不变,而颜色条却在这个区域之外?

bihw5rsg

bihw5rsg1#

你可以直接设置colorbar into it's own axis轴的大小和位置。我在下面提供了一个例子,可以在你现有的代码中添加另一个轴。如果这个图包含很多图和颜色条,你可能想使用gridspec来添加它们。

import matplotlib.pylab as plt
from numpy.random import rand

data = rand(100,100)
mycm = plt.cm.Reds

fig = plt.figure()
ax4 = plt.subplot2grid((3, 4), (1, 3), colspan=1, rowspan=1)

heatmap = ax4.pcolor(data, cmap=mycm, edgecolors = 'none', picker=True)

box = ax4.get_position()
ax4.set_position([box.x0*1.05, box.y0, box.width, box.height])

# create color bar
axColor = plt.axes([box.x0*1.05 + box.width * 1.05, box.y0, 0.01, box.height])
plt.colorbar(heatmap, cax = axColor, orientation="vertical")
plt.show()

相关问题