matplotlib Legendenmarker nur einmal

238

Ich zeichne oft einen Punkt auf einem Matplotlib-Plot mit:

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

Dies führt jedoch dazu, dass die Legende zweimal einen Stern in die Legende einfügt, so dass es so aussieht:

* * Global Optimum

wenn ich wirklich möchte, dass es so aussieht:

 *  Global Optimum

Wie mache ich das?

Carl
quelle
48
Ich wünschte, ich könnte diese Frage mehrmals beantworten. Ich hasse die Standardkonvention numpoints=2und war erleichtert zu sehen, dass sich bereits jemand die Zeit genommen hatte, danach zu fragen und eine Antwort zu erhalten.
Chris Redford
24
Denken Sie daran: Die Option für Streudiagramme istscatterpoints=1
Marcos Alex

Antworten:

253

Das sollte funktionieren:

legend(numpoints=1)

Übrigens, wenn Sie die Zeile hinzufügen

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

Dies ist die neue Standardeinstellung für Ihre matplotlibrc-Datei.

[Siehe auch Streupunkte, abhängig von Ihrer Darstellung.]

API: Link zu API-Dokumenten

DSM
quelle
7
Vielen Dank. Darauf bin ich heute auch gestoßen. Warum ist dies nicht die Standardeinstellung?
Salzkran
Könnten Sie einen Link zur API hinzufügen? matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.legend Ich könnte es einfach in mir selbst bearbeiten, aber das scheint unhöflich.
Tacaswell
2
Gibt es eine Möglichkeit, die Fläche zu reduzieren, die der Punkt für die Legende einnimmt?
Yotam
3
@DMS: Das hatte ich nicht gesehen. Mein Fehler. Sie sollten es auch als Code markieren, um es besser sichtbar zu machen.
Marcos Alex
2
Endlich ist geplant, dass numpoints = 1 in matplotlib 2.0 standardmäßig verwendet wird! Huzzah! github.com/matplotlib/matplotlib/issues/4854
DanHickstein
25

Ich ändere meine matplotlib rc-Parameter gerne dynamisch in jedem Python-Skript. Um dieses Ziel zu erreichen, verwende ich einfach so etwas am Anfang meiner Python-Dateien.

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

Dies gilt für alle Plots, die aus meiner Python-Datei generiert wurden.

EDIT: Für diejenigen, die Pylab nicht importieren möchten, lautet die lange Antwort

import matplotlib as mpl
mpl.rcParams['legend.numpoints'] = 1
mcgagnon
quelle