/ / Легенди Матлотліба в Loop - пітон, матплотліб, легенда

Легенди Matplotlib для Loop - python, matplotlib, legend

Передача даних і побудова її на карті з aлегенда для кожного бен, але я отримую лінію в моїй легенді для кожного разу, коли я проходжу через цикл. Як я можу просто отримати один рядок у моїй легенді для кожної категорії?

ПРИМІТКА: У мене є окремі петлі, щоб переконатися, що менші кола розміщуються на вершині більших кіл.

введіть опис зображення тут

sigcorrs = np.random.rand(100,1)

m = Basemap(llcrnrlon=35.,llcrnrlat=30.,urcrnrlon=-160.,urcrnrlat=63.,projection="lcc",resolution="c",lat_1=20.,lat_2=40.,lon_0=90.,lat_0=50.)
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",zorder=0)
plt.title("Mean Absolute Error")

for a in range(len(clat)):
if sigcorrs[a] > 0.8:
X,Y = m(clon[a],clat[a])
m.scatter(X,Y,s=300,label="Corr > 0.8")
else:
continue

for a in range(len(clat)):
if sigcorrs[a] > 0.6 and sigcorrs[a] <= 0.8:
X,Y = m(clon[a],clat[a])
m.scatter(X,Y,s=200,label="Corr > 0.6")
else:
continue

for a in range(len(clat)):
if sigcorrs[a] > 0.4 and sigcorrs[a] <= 0.6:
X,Y = m(clon[a],clat[a])
m.scatter(X,Y,s=100,label="Corr > 0.4")
else:
continue

for a in range(len(clat)):
if sigcorrs[a] <= 0.4:
X,Y = m(clon[a],clat[a])
m.scatter(X,Y,s=50,label="Corr < 0.4")
else:
continue

plt.legend()
plt.show()

Відповіді:

3 для відповіді № 1

Цього можна уникнути, встановивши лише одну мітку для кожної категорії. Наприклад, у першому циклі:

label_added =False
for a in range(len(clat)):
if sigcorrs[a] > 0.8:
X,Y = m(clon[a],clat[a])
if not label_added:
m.scatter(X,Y,s=300,label="Corr > 0.8")
label_added = True
else:
m.scatter(X,Y,s=300)
else:
continue