HOWTO · Matplotlib
Wie man die Legendenposition in Diagrammkoordinaten in Matplotlib angibt
Dieser Artikel zeigt Ihnen, wie Sie die Position der Legende in einem Diagramm in Matplotlib festlegen können.
Auf dieser Seite
Um eine Matplotlib-Legende zu positionieren, setzen Sie den Parameter loc auf eine Standardposition wie "upper left" oder "lower right". Für eine bestimmte Koordinate kombinieren Sie loc mit bbox_to_anchor: bbox_to_anchor gibt die Ankerkoordinate an, und loc wählt den Punkt der Legende aus, der daran ausgerichtet wird. Matplotlibs Standardwert für borderaxespad erzeugt einen kleinen Abstand. Daher kann der sichtbare Legendenpunkt etwas von der Koordinate abweichen. Setzen Sie borderaxespad=0, wenn eine exakte Ausrichtung erforderlich ist.
Beispiele: Eine Matplotlib-Legende mit loc und bbox_to_anchor positionieren
Das folgende Beispiel erstellt zwei Achsen und fügt jeder eine Legende hinzu. Für die erste Achse wird best, für die zweite lower left verwendet. Ändern Sie diese Werte, um Standardpositionen für Ihre eigenen geplotteten Daten zu vergleichen. Die Abbildungen zeigen die resultierenden Diagramme; im Code sehen Sie, welche Einstellungen Sie anpassen können.
import matplotlib.pyplot as plt
x = [1, 2, 3]
y1 = [0.5 * i + 1 for i in x]
y2 = [2 * i + 1 for i in x]
fig, ax = plt.subplots(2, 1)
ax[0].plot(x, y1, "b-", label="0.5x+1")
ax[0].plot(x, y2, "g-", label="2x+1")
ax[0].legend(loc="best")
ax[1].plot(x, y1, "b-", label="0.5x+1")
ax[1].plot(x, y2, "g-", label="2x+1")
ax[1].legend(loc="lower left")
plt.tight_layout()
plt.show()
Der Parameter loc akzeptiert Werte wie best, upper right, upper left, lower left, lower right, right, center left, center right, lower center, upper center und center:
best |
upper right |
upper left |
lower left |
lower right |
right |
center left |
center right |
lower center |
upper center |
center |
Bei einer Standardposition platziert loc die Legende innerhalb der jeweiligen Achsen. Mit best wählt Matplotlib anhand der dargestellten Inhalte eine Position aus; benannte Werte wie lower left legen die Position direkt fest. Wenn eine Legende eine wichtige Linie oder Markierung verdeckt, probieren Sie einen anderen Wert aus der Liste aus. Diese Optionen legen die Position der Legende relativ zu ihren Achsen fest, nicht relativ zur gesamten Abbildung.
Für eine koordinatenbasierte Position gibt bbox_to_anchor die Ankerkoordinate an, und loc wählt den Punkt der Legende aus, der daran ausgerichtet wird. Im nächsten Beispiel ist jeder Anker in Koordinaten relativ zu seiner jeweiligen Achse angegeben. Die rote Markierung wird mit ax.transAxes an derselben Koordinate eingezeichnet und macht so den Anker sichtbar. Die beiden Achsen verwenden unterschiedliche loc-Werte, um zu zeigen, wie sich dadurch der ausgewählte Legendenpunkt ändert. Mit dem Standardwert für borderaxespad liegt die Legende etwas von der jeweiligen Markierung entfernt; die Markierung kennzeichnet dennoch die Ankerkoordinate.
import matplotlib.pyplot as plt
x = [1, 2, 3]
y1 = [0.5 * i + 1 for i in x]
y2 = [2 * i + 1 for i in x]
fig, ax = plt.subplots(2, 1)
ax[0].plot(x, y1, "b-", label="Plot-1")
ax[0].plot(x, y2, "g-", label="Plot-2")
ax[0].legend(loc="upper left", bbox_to_anchor=(0.9, 0.75))
ax[0].scatter((0.9), (0.75), s=70, c="red", transform=ax[0].transAxes)
ax[1].plot(x, y1, "b-", label="Plot-1")
ax[1].plot(x, y2, "g-", label="Plot-2")
ax[1].legend(loc="center right", bbox_to_anchor=(0.6, 0.4))
ax[1].scatter((0.6), (0.4), s=70, c="red", transform=ax[1].transAxes)
plt.tight_layout()
plt.show()
In den oberen Achsen platziert bbox_to_anchor=(0.9, 0.75) den Anker an der roten Markierung. Da loc="upper left" gesetzt ist, wird die obere linke Ecke der Legende an diesem Anker ausgerichtet. Durch den Standardwert für borderaxespad bleibt ein kleiner sichtbarer Abstand. In den unteren Achsen liegt der Anker bei (0.6, 0.4) und loc="center right" ist gesetzt. Dadurch wird der rechte Mittelpunkt der Legende an der unteren roten Markierung ausgerichtet, ebenfalls mit diesem Abstand. Damit der jeweils ausgewählte Punkt genau auf seiner Markierung liegt, fügen Sie borderaxespad=0 zum legend-Aufruf der jeweiligen Achse hinzu.
Um eine der Positionierungen anzupassen, wählen Sie zunächst eine x- und y-Koordinate relativ zu den betreffenden Achsen. Setzen Sie dann das passende bbox_to_anchor-Tupel und markieren Sie den Punkt, während Sie das Diagramm anpassen. Wählen Sie mit loc den Legendenpunkt aus, der dort ausgerichtet werden soll. Die beiden Einstellungen wirken zusammen: Wenn Sie nur den Anker ändern, verschieben Sie den ausgewählten Punkt; mit einer Änderung von loc wählen Sie einen anderen Legendenpunkt für die Ausrichtung am Anker. Verwenden Sie für die Markierung dieselbe Achsentransformation wie für die zugehörige Legende, damit beide dieselbe Koordinatenreferenz nutzen. Lassen Sie den Standardwert für borderaxespad für einen kleinen Abstand bestehen, oder setzen Sie borderaxespad=0 im legend-Aufruf, um die Markierung genau zu treffen. Eine Konsolenausgabe wird nicht gezeigt; die Abbildungen oben zeigen die resultierenden Diagramme.