[PYTHON] Layouthinweise zur Matplotlib-Legende

Legende anzeigen, Kurve auswählen

Wenn Sie keine Optionen in ax.legend () einfügen.

python


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 101)
y1 = np.sin(x * np.pi)
y2 = np.cos(x * 2 * np.pi) * 0.5

fig = plt.figure()
ax = fig.add_subplot(111)

#Geben Sie den für die Legende verwendeten Kurvennamen mit der Beschriftungsoption an
ax.plot(x, y1, c="r", label="$\mathrm{sin}(x)$")
ax.plot(x, y2, c="b", label="$0.5 \mathrm{cos}(2x)$")
ax.grid(axis='both')

#Anzeige der Legende
ax.legend()

image.png

Die exakt gleiche Abbildung wie oben wird unter Verwendung der Kurven- und Beschriftungsinformationen gezeichnet, die von "ax.get_legend_handles_labels ()" wie unten gezeigt erfasst wurden.

python


ax.plot(x, y1, c="r", label="$\mathrm{sin}(x)$")
ax.plot(x, y2, c="b", label="$0.5 \mathrm{cos}(2x)$")
ax.grid(axis='both')

#Eine Liste von Kurvenobjekten mit einer für Hände angegebenen Beschriftung.
#labs enthält eine Liste der entsprechenden Labels
hans, labs = ax.get_legend_handles_labels()

#Anzeige der Legende
ax.legend(handles=hans, labels=labs)

Die von ax.get_legend_handles_labels () erfassten Kurveninformationen und Beschriftungsinformationen können auch wie folgt angegeben werden.

python


l1 = ax.plot(x, y1, c="r")
l2 = ax.plot(x, y2, c="b")
ax.grid(axis='both')

#Anzeige der Legende
#Da l1 und l2 Listentyp sind,+Verbinden Sie sich mit einem Operator
#In diesem Fall können Griffe weggelassen werden.
ax.legend(handles=l1+l2, labels=["$\mathrm{sin}(x)$", "$0.5 \mathrm{cos}(2x)$"])

Wenn Sie beispielsweise die Reihenfolge der Legenden umkehren möchten, gehen Sie wie folgt vor.

python


x = np.linspace(-3,3,101)

fig = plt.figure(figsize=(10,5))
#Linke Figur
ax1 = fig.add_subplot(121)
#Richtige Figur
ax2 = fig.add_subplot(122)
for i in np.linspace(-1,1,5):
    ax1.plot(x, np.sin(x)+i, label=str(i))
    ax2.plot(x, np.sin(x)+i, label=str(i))

#Informationen zu Legenden abrufen
hans, labs = ax1.get_legend_handles_labels()
#Anzeige der Legende links
ax1.legend(handles=hans, labels=labs, fontsize=8)
#Anzeige der Legende rechts (umgekehrte Reihenfolge)
ax2.legend(handles=hans[::-1], labels=labs[::-1], fontsize=8)

image.png

Legendenlayout

loc Option

Positionen innerhalb der Achse sind für Zahlen von 1 bis 9 definiert. Sie können auch die entsprechende Zeichenfolge angeben ("oben rechts", "oben links" usw.).

python


fig = plt.figure(figsize=(10,10))
for i in range(1,9+1):
    ax = fig.add_subplot(330+i)

    #Auch wenn Sie die zum Zeichnen benötigte Liste leeren
    #Der Stil der Kurve wird definiert und in der Legende wiedergegeben.
    ax.plot([], [], c="r", label="sin")
    ax.plot([], [], c="b", label="cos")
    #Fügen Sie grünen Text hinzu (zentriert auf der Achse)
    ax.text(0.5, 0.5, "loc={}".format(i),
            c="g", fontsize=30,
            horizontalalignment="center",
            verticalalignment="center", )
    #Zeichnen einer Legende mit angegebenem Ort
    ax.legend(loc=i)

image.png

Zeichnen außerhalb der Achse (bbox_to_anchor), Ändern der Anzahl der Spalten ( ncol)

Um das Verständnis zu erleichtern, habe ich den durch bbox_to_anchor angegebenen Koordinaten eine grüne Markierung hinzugefügt.

python


fig = plt.figure(figsize=(10,10))

#Oben links
ax = fig.add_subplot(321)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Zeichnen Sie eine Legende am oberen Rand der Achse
#Referenzpunkt in der unteren Mitte des Legendenfensters
#Die Koordinaten des Referenzpunkts sind der Mittelpunkt der Achse in horizontaler Richtung und etwas oberhalb der Oberseite der Achse in vertikaler Richtung.
#Wenden Sie eine 2-Spalten-Anzeige mit ncol an
ax.legend(loc="lower center", bbox_to_anchor=(0.5, 1.02,), borderaxespad=0, ncol=2)
# bbox_to_Fügen Sie an der Ankerposition eine grüne Markierung hinzu
# clip_on=Ermöglicht das Zeichnen außerhalb der Achse mit False
# transform=ax.In transAxes sind die unteren linken und oberen rechten Koordinaten der Achse(0,0)(1,1)Wenden Sie das System an, das wird.
circle = plt.Circle((0.5, 1.02,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

#Oben rechts
ax = fig.add_subplot(322)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Zeichnen Sie eine Legende in der oberen rechten Ecke der Achse
#Referenzpunkt oben links im Legendenfenster
#Die Koordinaten des Referenzpunkts liegen in horizontaler Richtung etwas rechts von der rechten Seite der Achse und in vertikaler Richtung leicht von der Oberseite der Achse.
ax.legend(loc="upper left", bbox_to_anchor=(1.02, 1.0,), borderaxespad=0)
circle = plt.Circle((1.02, 1.0,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

#Mitte rechts
ax = fig.add_subplot(324)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Zeichnen Sie eine Legende in der Mitte rechts der Achse
#Referenzpunkt in der Mitte links im Legendenfenster
#Die Koordinaten des Referenzpunkts liegen in horizontaler Richtung leicht rechts von der rechten Seite der Achse und in vertikaler Richtung in der Mitte der Achse.
ax.legend(loc="center left", bbox_to_anchor=(1.02, 0.5,), borderaxespad=0)
circle = plt.Circle((1.02, 0.5,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

#Unten links
ax = fig.add_subplot(325)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Zeichnen Sie eine Legende am unteren Rand der Achse
#Referenzpunkt in der Mitte des Legendenfensters
#Die Koordinaten des Referenzpunkts sind der Mittelpunkt der Achse in horizontaler Richtung und mehr als die Unterseite der Achse in vertikaler Richtung.
ax.legend(loc="upper center", bbox_to_anchor=(0.5, -0.1,), borderaxespad=0, ncol=2)
circle = plt.Circle((0.5, -0.1,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

#Rechts unten
ax = fig.add_subplot(326)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Zeichnen Sie eine Legende unten rechts auf der Achse
#Referenzpunkt unten links im Legendenfenster
#Die Koordinaten des Referenzpunkts liegen in horizontaler Richtung etwas rechts von der rechten Seite der Achse und in vertikaler Richtung von der unteren Seite der Achse.
#Wenden Sie eine 2-Spalten-Anzeige mit ncol an
ax.legend(loc="lower left", bbox_to_anchor=(1.02, 0.0,), borderaxespad=0)
circle = plt.Circle((1.02, 0.0,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

image.png

Wenn Sie den obigen Code von "borderaxespad = 0" in "borderaxespad = 1" ändern, sieht er wie in der folgenden Abbildung aus. Diese Zahl wird als relativer Wert definiert, wobei die Anzahl der durch die Schriftgröße angegebenen Punkte 1 beträgt.

image.png

2-Achsen-Diagrammlegende

Kombinieren Sie die beiden oben genannten.

python


x = np.linspace(-3,3,101)
y1 = np.sin(x * np.pi)
y2 = np.cos(x * 2 * np.pi) * 0.5
z  = np.tan(x * np.pi)

fig = plt.figure(figsize=(10,5))

#Linke Figur
#Zeichnen Sie die Legende für jede Achse unabhängig
ax = fig.add_subplot(131)
ax.plot(x, y1, c="r", label="$\mathrm{sin}(x)$")
ax.plot(x, y2, c="b", label="$0.5 \mathrm{cos}(2x)$")
ax.grid(axis='both')
#Anzeigen der Legende für das Diagramm der 1. Achse
ax.legend(loc="upper left", bbox_to_anchor=(1.2, 1.0))
#2. Achse
ax2 = ax.twinx()
ax2.plot(x, z, "g", marker="o", lw=0, ms=2, label = '$\mathrm{tan}(x)$')
ax2.set_ylim(-3,3)
#Anzeigen der Legende für das Diagramm auf der zweiten Achse
ax2.legend(loc="lower left", bbox_to_anchor=(1.2, 0.0))

#Richtige Figur
#Integrieren Sie die Legende der beiden Achsen
ax = fig.add_subplot(133)
ax.plot(x, y1, c="r", label="$\mathrm{sin}(x)$")
ax.plot(x, y2, c="b", label="$0.5 \mathrm{cos}(2x)$")
ax.grid(axis='both')
#Aufbewahrung von Legendeninformationen für die 1. Achse
hans1, labs1 = ax.get_legend_handles_labels()
#2. Achse
ax2 = ax.twinx()
ax2.plot(x, z, "g", marker="o", lw=0, ms=2, label = '$\mathrm{tan}(x)$')
ax2.set_ylim(-3,3)
#Aufbewahrung von Legendeninformationen für Achse 2
hans2, labs2 = ax2.get_legend_handles_labels()
#Anzeige der Legende
ax.legend(hans1+hans2, labs1+labs2, loc="upper left", bbox_to_anchor=(1.2, 1.0))

image.png

Recommended Posts

Layouthinweise zur Matplotlib-Legende
Durchscheinende Matplotlib-Legende
Hinweise zur Verwendung von matplotlib auf dem Server
Jupyter-, Numpy- und Matplotlib-Notizen, die in Berichten verwendet werden