matplotlib Indicatori di legenda solo una volta


238

Traccio spesso un punto su un grafico matplotlib con:

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

Tuttavia, questo fa sì che la legenda inserisca due volte una stella nella leggenda, in modo che assomigli a:

* * Global Optimum

quando voglio davvero che assomigli a:

 *  Global Optimum

Come faccio a fare questo?


48
Vorrei poter votare questa domanda più volte. Odio la numpoints=2convenzione di default ed è stato sollevato nel vedere che qualcuno si era già preso il tempo di chiederlo e ottenere una risposta.
Chris Redford,

24
Mente: l'opzione per i grafici a dispersione èscatterpoints=1
Marcos Alex

Risposte:


253

Questo dovrebbe funzionare:

legend(numpoints=1)

A proposito, se aggiungi la linea

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

al tuo file matplotlibrc, questo sarà il nuovo valore predefinito.

[Vedi anche punti di dispersione, a seconda della trama.]

API: collegamento a documenti API


7
Grazie. L'ho incontrato anche oggi. Perché questo non è il valore predefinito?
saltycrane,

Potresti aggiungere un link all'API? matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend Potrei semplicemente modificarlo in me stesso, ma sembra maleducato.
Tacaswell,

2
C'è un modo per ridurre l'area che il punto assume sulla legenda?
Yotam,

3
@DMS: non l'avevo visto. Errore mio. Dovresti anche evidenziarlo come codice per renderlo più visibile.
Marcos Alex

2
Finalmente, ci sono piani per numpoints = 1 come impostazione predefinita in matplotlib 2.0! Huzzah! github.com/matplotlib/matplotlib/issues/4854
DanHickstein

25

Mi piace cambiare dinamicamente i miei parametri matplotlib rc in ogni script Python. Per raggiungere questo obiettivo, uso semplicemente qualcosa del genere all'inizio dei miei file Python.

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

Questo si applica a tutti i grafici generati dal mio file Python.

EDIT: per coloro a cui non piace importare pylab, la risposta è lunga

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.