![](/img/trans.png)
[英]Set 'global' colorbar range for multiple matplotlib subplots of different ranges
[英]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.