Imshow 具有相同颜色条的子图

新手上路,请多包涵

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

原文由 lovespeed 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

要做到这一点,您需要让所有图像具有相同的强度等级,否则 colorbar() 颜色是没有意义的。为此,请使用 vminvmax imshow() 参数,并确保它们对所有图像都相同。

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

 import pylab as plt
import numpy as np
my_image1 = np.linspace(0, 10, 10000).reshape(100,100)
my_image2 = np.sqrt(my_image1.T) + 3
plt.subplot(1, 2, 1)
plt.imshow(my_image1, vmin=0, vmax=10, cmap='jet', aspect='auto')
plt.subplot(1, 2, 2)
plt.imshow(my_image2, vmin=0, vmax=10, cmap='jet', aspect='auto')
plt.colorbar()

在此处输入图像描述

原文由 tiago 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=1, ncols=2)

# generate randomly populated arrays
data1 = np.random.rand(10,10)*10
data2 = np.random.rand(10,10)*10 -7.5

# find minimum of minima & maximum of maxima
minmin = np.min([np.min(data1), np.min(data2)])
maxmax = np.max([np.max(data1), np.max(data2)])

im1 = axes[0].imshow(data1, vmin=minmin, vmax=maxmax,
                     extent=(-5,5,-5,5), aspect='auto', cmap='viridis')
im2 = axes[1].imshow(data2, vmin=minmin, vmax=maxmax,
                     extent=(-5,5,-5,5), aspect='auto', cmap='viridis')

# add space for colour bar
fig.subplots_adjust(right=0.85)
cbar_ax = fig.add_axes([0.88, 0.15, 0.04, 0.7])
fig.colorbar(im2, cax=cbar_ax)

带有单色条的双 imshow 图

原文由 airdas 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏