簡體   English   中英

使用 matplotlib 指示多個子圖的數據范圍的顏色條?

[英]One colorbar to indicate data range for multiple subplots using matplotlib?

我見過很多類似問題。 但是,顏色條實際上指示了最后一個子圖的數據范圍,如下代碼所示:

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(19680801)


fig, axs = plt.subplots(2, 1)
cmaps = ['RdBu_r', 'viridis']
for row in range(2):
    ax = axs[row]
    if row == 0:
        pcm = ax.pcolormesh(np.random.random((20, 20)) * (-100),
                            cmap=cmaps[0])
    elif row == 1:
            pcm = ax.pcolormesh(np.random.random((20, 20)) * 100,
                            cmap=cmaps[0])
fig.colorbar(pcm, ax=axs)
plt.show()

輸出

colobar 僅表示第二個子圖的數據范圍。 第一個子圖中的數據實際上是負數,在顏色欄中沒有顯示。

fig, axs = plt.subplots(2, 1)
cmaps = ['RdBu_r', 'viridis']
for row in range(2):
    ax = axs[row]
    if row == 0:
        pcm = ax.pcolormesh(np.random.random((20, 20)) * (-100),
                            cmap=cmaps[0])
    elif row == 1:
            pcm = ax.pcolormesh(np.random.random((20, 20)) * 100,
                            cmap=cmaps[0])
    fig.colorbar(pcm, ax=ax)
plt.show()

輸出

那么如何讓多個子圖共享一個顏色條來表示整體數據范圍呢?

問題可能是由fig.colorbar(pcm, ax=axs)引起的,其中pcm指向第二個子圖,但我不知道如何解決這個問題。

將顏色限制設置為相同...

import matplotlib.pyplot as plt 
import numpy as np 

fig, axs = plt.subplots(2, 1)
cmaps = ['RdBu_r', 'viridis']
for row in range(2):
    ax = axs[row]
    mult = -100 if row == 0 else 100
    pcm = ax.pcolormesh(np.random.random((20, 20)) * mult,
                            cmap=cmaps[0], vmin=-150, vmax=150)
fig.colorbar(pcm, ax=axs)
plt.show()

或者等效地,您可以指定標准化 object:

import matplotlib.pyplot as plt 
import numpy as np 


fig, axs = plt.subplots(2, 1)
cmaps = ['RdBu_r', 'viridis']
norm = plt.Normalize(vmin=-150, vmax=150)
for row in range(2):
    ax = axs[row]
    mult = -100 if row == 0 else 100
    pcm = ax.pcolormesh(np.random.random((20, 20)) * mult,
                            cmap=cmaps[0], norm=norm)
fig.colorbar(pcm, ax=axs)
plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM