多個影像與一個顏色條#

對多個影像使用單一顏色條。

目前,一個顏色條只能連接到一個影像。此連接保證資料著色與顏色對應表刻度一致(也就是說,顏色對應表中值 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()
Multiple images

當更改縮放比例時,例如透過縮放顏色條或透過 Qt 後端的「編輯軸、曲線和影像參數」GUI,現在所有影像中的顏色都保持一致。這足以應付大多數實際使用案例。

進階:額外同步顏色對應表#

共用一個通用的 norm 物件可確保同步縮放,因為刻度變更會就地修改 norm 物件,因此會傳播到所有使用此 norm 的影像。此方法無法協助同步顏色對應表,因為變更影像的顏色對應表(例如,透過 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)

腳本總執行時間: (0 分鐘 1.114 秒)

由 Sphinx-Gallery 產生的圖庫