matplotlib imshow固定方面和垂直色条匹配主轴高度

时间:2014-10-25 15:11:43

标签: python matplotlib

我需要使用"温度图"绘制网格。目前,我使用imshow和colormap的值。这在Matplotlib overview中有描述,因此我修改了示例以强制图的自定义方面:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np

plt.figure()
ax = plt.gca()
im = ax.imshow(np.arange(100).reshape((10,10)), aspect=0.5)

# create an axes on the right side of ax. The width of cax will be 5%
# of ax and the padding between cax and ax will be fixed at 0.05 inch.
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)

plt.colorbar(im, cax=cax)

plt.savefig("test.png")

但结果不是我想要的,颜色栏高于主轴:test

有趣的是,当色彩图是水平的时,它会正确缩放:

cax = divider.append_axes("bottom", size="5%", pad=0.05)
plt.colorbar(im, cax=cax, orientation="horizontal")

horizontal

1 个答案:

答案 0 :(得分:2)

这里发生的是你在imshow图像中应用了0.5的方面。这会将图像的垂直延伸分为2,而颜色条保持原始范围。我看到2个解决方案

您可以使用以下方法手动设置颜色条的大小:

cax = fig.add_axes([0.85, 0.3, 0.04, 0.4])

...或者您可以将一个方面应用于cax,以使其y维度与图像一致。在您将大小设置为5%的情况下,设置aspect = 1将为您提供原始垂直范围的1/20的图像。获得1/2的图像集方面为20 * 0.5 = 10.你可以为方面创建一个变量,如果你想试验改变图上的方面,颜色条将会跟随。

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np

fig = plt.figure()
ax = plt.gca()
im = ax.imshow(np.arange(100).reshape((10,10)), aspect=0.5)

# create an axes on the right side of ax. The width of cax will be 5%
# of ax and the padding between cax and ax will be fixed at 0.05 inch.
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05, aspect=10)
#cax = fig.add_axes([0.85, 0.3, 0.04, 0.4])
plt.colorbar(im, cax=cax)

plt.show()