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?


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.