2012-10-04 23 views
12

Un diagrama simple con una leyenda hecha con matplotlib produce lo siguiente: los marcadores a la izquierda de las etiquetas de mi leyenda aparecen dos veces. ¿Alguien puede saber por qué y cómo evitar el problema? Este es mi mandamiento:Leyenda del diagrama de Python: los marcadores aparecen dos veces

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

Gracias

Respuesta

27

Puede cambiar el número de marcadores que se muestran en la leyenda utilizando el numpoints palabra clave:

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 cree que la razón por la que los marcadores aparecen dos veces (de manera predeterminada) es porque m atplotlib está tratando de mostrar los conectores de estilo libre entre los marcadores. Parece un poco extraño cuando no hay conector.

Si la trama tenía líneas continuas y discontinuas,

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

entonces la leyenda se parece a esto:

enter image description here

y ahora se puede ver el efecto del estilo de línea entre los marcadores de la leyenda (así como en el gráfico).


Si no desea ningún mango leyenda en absoluto, entonces se podría utilizar

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

Por ejemplo,

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

Usted podría utilizar

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

para eliminar también el marcador de leyenda.

+0

Entendido. ¡Muchas gracias! – Patrick

+0

¿Es posible hacer que el conector de línea desaparezca por completo? ¿O necesito usar el comando 'scatter()' para eso? – Thriveth

+0

Agregué el código anterior que muestra cómo hacerlo. – unutbu

Cuestiones relacionadas