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?

carl
fuente
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

DSM
fuente
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
mcgagnon
fuente