2012-10-04 11 views
12

Una trama semplice con una legenda fatta con matplotlib produce quanto segue: i marcatori a sinistra delle etichette della mia legenda appaiono due volte. Qualcuno può sapere perché e come evitare il problema? È il mio comandamento:Legenda trama pitone: gli indicatori compaiono due volte

pl.plot(x1,x2,'g^', label='regional') 
pl.plot(y1,y2,'bo', label='local') 
pl.legend(loc='upper left') 

Grazie

risposta

27

È possibile modificare il numero di marcatori indicati nella leggenda utilizzando la parola chiave numpoints:

import matplotlib.pyplot as plt 
import numpy as np 
x1 = y1 = np.linspace(0, 10, 100) 
x2 = np.sin(x1) 
y2 = np.cos(y1) 
plt.plot(x1,x2,'g--^', label='regional') 
plt.plot(y1,y2,'b-o', label='local') 
plt.legend(loc='upper left', numpoints = 1) 
plt.show() 

enter image description here


I credi che il motivo per cui gli indicatori compaiono due volte (di default) è perché m atplotlib sta cercando di mostrare i connettori di stile lineare tra i marcatori. Sembra un po 'strano quando non c'è nessun connettore.

Se la trama aveva linee continue e tratteggiate,

plt.plot(x1,x2,'g--^', label='regional') 
plt.plot(y1,y2,'b-o', label='local') 

poi la leggenda si presenta così:

enter image description here

e ora si può vedere l'effetto del lineStyle tra i marcatori in la legenda (oltre che sul grafico).


Se non si desidera alcun maniglia leggenda a tutti, allora si potrebbe utilizzare

plt.legend(..., handlelength=0) 

Per esempio,

import numpy as np 
import matplotlib.pyplot as plt 

x1 = y1 = np.linspace(0, 10, 100) 
x2 = np.sin(x1) 
y2 = np.cos(y1) 
plt.plot(x1,x2,'g--^', label='regional') 
plt.plot(y1,y2,'b-o', label='local') 
plt.legend(loc='best', numpoints=1, handlelength=0) 
plt.show() 

enter image description here

Si potrebbe utilizzare

plt.legend(loc='best', numpoints=1, handlelength=0, 
      markerscale=0, handletextpad=0) 

per rimuovere anche l'indicatore di legenda.

+0

Capito. Grazie mille! – Patrick

+0

È possibile disattivare completamente il connettore di linea? O devo usare il comando 'scatter()' per quello? – Thriveth

+0

Ho aggiunto il codice sopra che mostra come farlo. – unutbu

Problemi correlati