Python matplotlib - 如何在不调整热图的情况下移动colorbar?

Jam*_*der 3 python position matplotlib heatmap colorbar

嗨所以我有以下命令.

要在热图中为网格指定子图轴:

ax4 = plt.subplot2grid((3, 4), (1, 3), colspan=1, rowspan=1)
Run Code Online (Sandbox Code Playgroud)

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

heatmap = ax4.pcolor(data, cmap=mycm, edgecolors = 'none', picker=True)
Run Code Online (Sandbox Code Playgroud)

要根据其他子图将曲线向右移动以使其在轴中居中:

box = ax4.get_position()
ax4.set_position([box.x0*1.05, box.y0, box.width * 1.05, box.height])
Run Code Online (Sandbox Code Playgroud)

显示没有填充的颜色条

fig.colorbar(heatmap, orientation="vertical")
Run Code Online (Sandbox Code Playgroud)

然而,这会导致:

http://imageshack.us/a/img812/4343/t08o.png

请注意,颜色条位于热图的顶部.

如果我使用pad关键字,我可以移动颜色条,使其不与热图重叠,但这会减小绘图区域的宽度,即:

http://imageshack.us/a/img542/8043/ci8m.png

如何使绘图区域保持相同的宽度,并且只有该区域外的颜色条?

谢谢!

Mol*_*lly 8

您可以将颜色条放入其自己的轴中,并直接设置该的大小和位置.我在下面添加了一个示例,它为您现有的代码添加了另一个轴.如果此图包含许多绘图和颜色条,您可能希望使用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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述