簡體   English   中英

Matplotlib底圖中的圖例

[英]Legends in Matplotlib Basemap

我在底圖中繪制了多個點,並希望有一個圖例來表示每種顏色代表的類別。 但是,由於我在每個類別中都有多個點,因此圖例會提取這些點中的每一個,從而使我在圖例中具有相同類別的多個條目。 有沒有辦法只顯示一個整體的顏色類別列表?

m = Basemap(llcrnrlon=30.,llcrnrlat=20.,urcrnrlon=-160.,urcrnrlat=63.,projection='lcc',resolution='c',lat_1=20.,lat_2=40.,lon_0=90.,lat_0=50.)

X,Y = m(lon,lat)    
m.drawcountries()
m.drawmapboundary(fill_color='lightblue')
m.drawparallels(np.arange(0.,90.,5.),color='gray',dashes=[1,3],labels=[1,0,0,0])
m.drawmeridians(np.arange(0.,360.,15.),color='gray',dashes=[1,3],labels=[0,0,0,1])
m.fillcontinents(color='beige',lake_color='lightblue')
plt.title('MERRA-Observation Correlations')

for j in range(len(corr)):
    if j == 0 or j == 1 or j ==2:
        m.plot(X[j],Y[j],'o',color='orange',markersize=np.absolute(corr[j])*17.5,label='Prairie')
    if j == 3 or j ==4 or j == 5:
        m.plot(X[j],Y[j],'o',color='violet',markersize=np.absolute(corr[j])*17.5,label='Tundra')
    if j ==6 or j == 7 or j == 8:
        m.plot(X[j],Y[j],'o',color='purple',markersize=np.absolute(corr[j])*17.5,label='Taiga')
    plt.legend()

注意:我將plt.legend放置在循環的內部和外部,結果相同。

在此處輸入圖片說明

您似乎正在為每個數據點繪制一條全新的線。 散點圖可能更合適:代替j循環,請嘗試:

scale = 17.5
m.scatter(X[:3], Y[:3], color='orange', s=abs(corr[:3])*scale, label='Prairie')
m.scatter(X[3:6], Y[3:6], color='violet', s=abs(corr[3:6])*scale, label='Tundra')
m.scatter(X[6:], Y[6:], color='purple', s=abs(corr[6:])*scale, label='Taiga')

(未測試:我沒有您的數據)。

您可以保留m.plot返回的對象的句柄,而不必傳遞圖例kwarg。 然后,您可以僅使用要保留的圖來手動創建圖例。

如何為scatter()添加圖例? 有一個很好的例子。

另一種方法:以此替換對plt.legend()調用,並在for循環執行此操作:

ax = plt.gca()
handles, labels = ax.get_legend_handles_labels()
legend = plt.legend([handles[0],handles[3],handles[6]], labels[0],labels[3],labels[6]])

這拉開某個設定的東西plotscatter等)調用被發送到legend ,所以你可以看到你會如何改變不同的傳說。

xnx的分散解決方案也不錯。

ps-這與底圖無關,通常是matplotlib繪圖。

暫無
暫無

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

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