Skip to main content
 首页 » 编程设计

python之Matplotlib basemap 中的图例

2025年05月04日51zlslch

我在 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') 

(未经测试:我没有您的数据)。