备注
前往结尾 下载完整示例代码。
带有单个颜色条的多个图像#
为多张图像使用单一颜色条。
目前,一个颜色条只能连接到一个图像。这种连接确保了数据着色与颜色映射比例一致(即颜色映射中值 x 的颜色用于图像中数据值 x 的着色)。
如果我们希望一个颜色条代表多张图像,我们必须通过使用相同的数据归一化来明确确保数据着色的连贯性。我们通过显式创建一个 norm 对象,并将其传递给所有图像绘制方法来实现这一点。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
np.random.seed(19680801)
datasets = [
(i+1)/10 * np.random.rand(10, 20)
for i in range(4)
]
fig, axs = plt.subplots(2, 2)
fig.suptitle('Multiple images')
# create a single norm to be shared across all images
norm = colors.Normalize(vmin=np.min(datasets), vmax=np.max(datasets))
images = []
for ax, data in zip(axs.flat, datasets):
images.append(ax.imshow(data, norm=norm))
fig.colorbar(images[0], ax=axs, orientation='horizontal', fraction=.1)
plt.show()

现在,当改变缩放比例时,例如通过颜色条放大或在Qt后端的“编辑轴、曲线和图像参数”GUI中,所有图像的颜色保持一致。这对于大多数实际使用情况来说已经足够了。
高级:此外同步颜色映射#
共享一个共同的规范对象可以保证同步缩放,因为缩放变化会就地修改规范对象,从而传播到所有使用该规范的图像。这种方法对于同步颜色映射没有帮助,因为更改图像的颜色映射(例如通过Qt后端的“编辑轴、曲线和图像参数”GUI)会导致图像引用新的颜色映射对象。因此,其他图像不会更新。
要更新其他图像,请使用以下代码同步色图:
def sync_cmaps(changed_image):
for im in images:
if changed_image.get_cmap() != im.get_cmap():
im.set_cmap(changed_image.get_cmap())
for im in images:
im.callbacks.connect('changed', sync_cmaps)
参考文献
以下示例展示了以下函数、方法、类和模块的使用: