Imshow具有相同颜色条的子图

时间:2013-08-01 09:18:03

标签: python matplotlib

我想制作4个imshow子图,但它们都共享相同的色图。 Matplotlib根据矩阵的条目自动调整色彩图上的比例。例如,如果我的一个矩阵全部为10,而另一个的所有条目都等于5,我使用Greys色图,那么我的一个子图应该是完全黑色而另一个应该是完全灰色的。但他们两个最终都变成了黑色。如何使所有子图在色图上共享相同的比例?

3 个答案:

答案 0 :(得分:34)

要做到这一点,你需要让所有图像具有相同的强度标度,否则colorbar()颜色毫无意义。为此,请使用vmin的{​​{1}}和vmax参数,并确保它们与您的所有图片相同。

例如,如果要显示的值范围从0到10,则可以使用以下内容:

imshow()

enter image description here

答案 1 :(得分:3)

当数据(数据 1 和数据 2)集的范围未知并且您想对两个/所有图使用相同的颜色条时,找到整体最小值和最大值以用作 vmin 和 {{1} } 在对 vmax 的调用中:

imshow

Double imshow plot with single colourbar

答案 2 :(得分:2)

可能您事先并不知道数据的范围,但您可能知道它们是兼容的。在这种情况下,您可能更喜欢让matplotlib为第一个绘图选择那些范围,并对剩余的绘图使用相同的范围。这是你如何做到的。关键是通过properties()['clim']

获得限制
import numpy as np
import matplotlib.pyplot as plt

my_image1 = np.linspace(0, 10, 10000).reshape(100,100)
my_image2 = np.sqrt(my_image1.T) + 3

fig, axes = plt.subplots(nrows=1, ncols=2)
im = axes[0].imshow(my_image1)
clim=im.properties()['clim']
axes[1].imshow(my_image2, clim=clim)

fig.colorbar(im, ax=axes.ravel().tolist(), shrink=0.5)

plt.show()