我想制作4个imshow
子图,但它们都共享相同的色图。 Matplotlib根据矩阵的条目自动调整色彩图上的比例。例如,如果我的一个矩阵全部为10,而另一个的所有条目都等于5,我使用Greys
色图,那么我的一个子图应该是完全黑色而另一个应该是完全灰色的。但他们两个最终都变成了黑色。如何使所有子图在色图上共享相同的比例?
答案 0 :(得分:34)
要做到这一点,你需要让所有图像具有相同的强度标度,否则colorbar()
颜色毫无意义。为此,请使用vmin
的{{1}}和vmax
参数,并确保它们与您的所有图片相同。
例如,如果要显示的值范围从0到10,则可以使用以下内容:
imshow()
答案 1 :(得分:3)
当数据(数据 1 和数据 2)集的范围未知并且您想对两个/所有图使用相同的颜色条时,找到整体最小值和最大值以用作 vmin
和 {{1} } 在对 vmax
的调用中:
imshow
答案 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()