2017-09-08 59 views
5

我使用matplotlib庫來繪製一個圖上相同變量的多個數字。 我不是在尋找colorbar子圖,這是主要的搜索材料。我繪製了多個scatter s,但colorbar僅設置爲最後一個散點圖的值。用於多個散點圖的一個顏色條

下面是部分代碼:

plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s') 
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o') 
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^') 
plt.colorbar().set_label('Wind speed',rotation=270) 
+0

你有沒有打過電話'plt.colorbar()。set_label( '風速',旋轉= 270)'後,每'.scatter'? –

+0

是的,但是增加了三個顏色條,這不是我正在尋找的。我需要一個包含繪製散點圖中所有範圍的顏色條。 –

回答

2

它需要一些額外的工作:

  • 你必須得到c S的最小值和最大值(在顏色條值)
  • 你必須clim每個散點圖

網絡RST的最小值和最大值:

zs = np.concatenate([z1, z2, z3], axis=0) 
min_, max_ = zs.min(), zs.max() 

然後散點圖與clim

plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s') 
plt.clim(min_, max_) 
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o') 
plt.clim(min_, max_) 
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^') 
plt.clim(min_, max_) 
plt.colorbar().set_label('Wind speed',rotation=270) 

對於一個非常簡單的數據集:

x1, x2, x3 = [1,2,3], [2,3,4], [3,4,5] 
y1 = y2 = y3 = [1, 2, 3] 
z1, z2, z3 = [1,2,3], [4,5,6], [7,8,9] 

enter image description here

+1

哦,謝謝。這是一個乾淨的方式來做到這一點。 –

0

scatternorm說法。對所有散點圖使用相同的norm可確保任何散點圖(因此也是最後一個)產生的色條對於所有散點圖都相同。

norm可以是一個Normalize實例,其中設置了最小值和最大值,並在其間產生線性縮放。當然,你也可以使用matplotlib.colors提供像PowerNormLogNorm任何其他規範等

mini, maxi = 0, 2 # or use different method to determine the minimum and maximum to use 
norm = plt.Normalize(mini, maxi) 
plt.scatter(x1, y1, c=z1,cmap='viridis_r',marker='s', norm=norm) 
plt.scatter(x2, y2, c=z2,cmap='viridis_r',marker='o', norm=norm) 
plt.scatter(x3, y3, c=z3,cmap='viridis_r',marker='^', norm=norm) 
plt.colorbar().set_label('Wind speed',rotation=270) 
相關問題