matplotlib Markery legendy tylko raz

238

Często rysuję punkt na wykresie matplotlib za pomocą:

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

Powoduje to jednak, że legenda dwukrotnie umieszcza gwiazdę w legendzie, tak że wygląda następująco:

* * Global Optimum

kiedy naprawdę chcę, żeby to wyglądało:

 *  Global Optimum

Jak mam to zrobic?

carl
źródło
48
Chciałbym móc wielokrotnie głosować za tym pytaniem. NIENAWIDZĘ domyślnej numpoints=2konwencji i poczułem ulgę, widząc, że ktoś poświęcił czas, aby o nią zapytać i uzyskać odpowiedź.
Chris Redford,
24
Uwaga: opcja dla wykresów rozrzutu toscatterpoints=1
Marcos Alex

Odpowiedzi:

253

To powinno działać:

legend(numpoints=1)

BTW, jeśli dodasz linię

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

do pliku matplotlibrc, będzie to nowa wartość domyślna.

[Zobacz także punkty rozrzutu, w zależności od fabuły.]

API: Link do dokumentów API

DSM
źródło
7
Dzięki. Wpadłem na to również dzisiaj. Dlaczego to nie jest domyślne?
saltycrane
Czy możesz dodać link do interfejsu API? matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend Mógłbym po prostu edytować to w sobie, ale to wydaje się niegrzeczne.
tacaswell
2
Czy jest jakiś sposób na zmniejszenie powierzchni, którą zajmuje legenda?
Yotam
3
@DMS: Nie widziałem tego. Mój błąd. Powinieneś także zaznaczyć go jako kod, aby był bardziej widoczny.
Marcos Alex
2
Nareszcie są plany, aby numpoints = 1 był domyślny w matplotlib 2.0! Huzzah! github.com/matplotlib/matplotlib/issues/4854
DanHickstein
25

Lubię dynamicznie zmieniać parametry rc matplotlib w każdym skrypcie Pythona. Aby osiągnąć ten cel, po prostu używam czegoś takiego na początku moich plików Pythona.

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

Dotyczy to wszystkich wykresów wygenerowanych z mojego pliku python.

EDYCJA: Dla tych, którzy nie lubią importować pylab, długa odpowiedź brzmi

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
McGagnon
źródło