Pregunta marcadores de círculo de leyenda matplotlib


Estoy haciendo una leyenda para un diagrama de dispersión utilizando un proxy artistas (http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist) y tratando de hacer marcadores en forma de círculo.

Este es mi código:

legend([Circle((0,0), fc='g')], ["Green Circle"])

Pero cuando lo grabo, la leyenda no tiene un círculo y en su lugar muestra un rectángulo ...

¿Cómo consigo que la leyenda tenga marcadores circulares?


5
2017-07-10 23:15


origen


Respuestas:


Si todo lo que está buscando es un marcador circular en la leyenda (en lugar de usar estrictamente los artistas proxy), sugiero que intente algo como:

line1 = Line2D(range(1), range(1), color="white", marker='o', markerfacecolor="red")
line2 = Line2D(range(1), range(1), color="white", marker='o',markerfacecolor="green")
line3 = Line2D(range(1), range(1), color="white", marker='o',markersize=5, markerfacecolor="slategray")
line4 = Line2D(range(1), range(1), color="white", marker='o',markersize=10,markerfacecolor="slategray")
plt.legend((line1,line2,line3,line4),('Thing 1','Thing 2', 'Thing 3', 'Thing 4'),numpoints=1, loc=1)

Esto le muestra círculos de diferentes colores y tamaños, donde la línea 2D que se dibuja es blanca (por lo tanto, color="white") Si no desea que se rellenen los círculos, por ejemplo, establezca markeredgecolor="green" y markerfacecolor="white".

Más retoques

  • Si no tiene un fondo blanco, o si la línea se cruza con la cuadrícula en el fondo, color="white" todavía mostrará la línea. linewidth=0 ocultará completamente la línea.
  • Utilizar el handletextpad argumento de palabra clave para plt.legend Para reducir el espacio entre el círculo y la etiqueta. El valor también puede ser negativo, por ejemplo. handletextpad=-0.3.
  • Si estás usando seaborn paletas, puede establecer los colores de la cara del marcador individual al indexar la paleta. P.ej. markerfacecolor=sns.color_palette("cubehelix", 3)[0]

8
2017-07-10 23:39



@punkkat Al agregar parches (que es el Círculo) para agregar a una leyenda, no es el parche lo que se agrega, sino que se crea un nuevo parche de Rectángulo con exactamente las mismas propiedades (color, sombreado, alfa, etc.) del parche dado Por lo tanto, independientemente de la forma entrante, el resultado será un parche cuadrado en la leyenda.

La solución simple, dada por @cosmosis, es pasar las instancias de línea a la leyenda, que puede admitir marcadores arbitrarios, y como no hay limitación en la forma de un marcador, no hay limitación en las formas a las que puede pasar. pon la leyenda


3
2017-07-12 15:37