Marcadores de leyenda matplotlib solo una vez


238

A menudo trazo un punto en un diagrama matplotlib con:

x = 10
y = 100
plot(x, y, "k*", label="Global Optimum")
legend()

Sin embargo, esto hace que la leyenda ponga una estrella en la leyenda dos veces, de modo que se vea así:

* * Global Optimum

cuando realmente quiero que se vea así:

 *  Global Optimum

¿Cómo hago esto?


48
Desearía poder votar esta pregunta varias veces. ODIO la numpoints=2convención predeterminada y me sentí aliviado al ver que alguien ya se había tomado el tiempo para preguntar y obtener una respuesta.
Chris Redford

24
Mente: la opción para diagramas de dispersión esscatterpoints=1
Marcos Alex

Respuestas:


253

Esto debería funcionar:

legend(numpoints=1)

Por cierto, si agrega la línea

legend.numpoints     : 1      # the number of points in the legend line

a su archivo matplotlibrc, entonces este será el nuevo valor predeterminado.

[Vea también puntos de dispersión, dependiendo de su trama.]

API: enlace a documentos de API


77
Gracias. Me encontré con esto hoy también. ¿Por qué no es este el valor predeterminado?
saltycrane

¿Podría agregar un enlace a la API? matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend Podría editarlo solo, pero eso parece grosero.
tacaswell

2
¿Hay alguna forma de reducir el área que el punto toma en la leyenda?
Yotam

3
@DMS: no había visto eso. Mi error. También debe resaltarlo como código para hacerlo más visible.
Marcos Alex

2
¡Por fin, hay planes para que numpoints = 1 sea predeterminado en matplotlib 2.0! Huzzah! github.com/matplotlib/matplotlib/issues/4854
DanHickstein

25

Me gusta cambiar mis parámetros matplotlib rc dinámicamente en cada script de Python. Para lograr este objetivo, simplemente uso algo así al comienzo de mis archivos de Python.

from pylab import *
rcParams['legend.numpoints'] = 1

Esto se aplicará a todas las parcelas generadas a partir de mi archivo Python.

EDITAR: Para aquellos que no les gusta importar pylab, la respuesta larga es

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.