Matplotlib ist eine leistungsstarke Python-Bibliothek zum Erstellen von Visualisierungen. Bei der Arbeit mit mehreren Subplots kann die Verwaltung von Legenden jedoch komplex werden. Dieser Artikel bietet effiziente Methoden zum Erstellen einer einzigen, einheitlichen Legende für alle Ihre Subplots.
Inhaltsverzeichnis
- Subplots in Matplotlib verstehen
- Methode 1: Verwendung von
fig.legend()
- Methode 2: Anpassen von Legendenplatzierung und -darstellung
- Methode 3: Umgang mit mehreren Linien pro Subplot
- Fazit
- FAQ
Subplots in Matplotlib verstehen
Subplots ordnen mehrere Plots innerhalb einer einzigen Abbildung an. In Matplotlib erstellen Sie sie mit matplotlib.pyplot.subplots()
, das ein Figure-Objekt und ein Array von Axes-Objekten (eins pro Subplot) zurückgibt.
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2) # 2x2 Raster von Subplots
# Daten in jedem Subplot zeichnen
axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Linie 1')
axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Linie 2')
axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Linie 1')
axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Linie 2')
plt.show()
Dies erstellt ein 2×2-Raster, jedes mit einer eigenen Legende. Wir werden diese zu einer einzigen Legende zusammenfassen.
Methode 1: Verwendung von fig.legend()
Der einfachste Ansatz verwendet die legend()
-Methode des Figure-Objekts. Dies erfordert das Sammeln aller Legende-Handles und -Beschriftungen.
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2)
lines1, = axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Linie 1')
lines2, = axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Linie 2')
lines3, = axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Linie 1')
lines4, = axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Linie 2')
# Eindeutige Handles und Beschriftungen sammeln
handles = [lines1, lines2]
labels = [h.get_label() for h in handles]
fig.legend(handles, labels, loc='upper right')
plt.show()
Hinweis: Wir verwenden nur eindeutige Handles, um Duplikate in der Legende zu vermeiden. loc
gibt die Position der Legende an.
Methode 2: Anpassen von Legendenplatzierung und -darstellung
Sie können die Position, den Rahmen, die Schriftgröße und mehr der Legende anpassen.
import matplotlib.pyplot as plt
# ... (Plot-Code aus Methode 1) ...
fig.legend(handles, labels, loc='lower center', bbox_to_anchor=(0.5, -0.1), ncol=2, frameon=True, fontsize=12)
plt.show()
Hier haben wir die Legende unten in der Mitte positioniert, die vertikale Position mit bbox_to_anchor
angepasst, zwei Spalten (ncol=2
) verwendet, einen Rahmen hinzugefügt (frameon=True
) und die Schriftgröße vergrößert.
Methode 3: Umgang mit mehreren Linien pro Subplot
Für mehrere Linien innerhalb eines Subplots sammeln Sie alle relevanten Handles und Beschriftungen.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
line1, = ax.plot([1, 2, 3], [4, 5, 6], label='Linie 1')
line2, = ax.plot([1, 2, 3], [7, 8, 9], label='Linie 2')
line3, = ax.plot([1, 2, 3], [10, 11, 12], label='Linie 3')
fig.legend([line1, line2, line3], [line1.get_label(), line2.get_label(), line3.get_label()], loc='best')
plt.show()
Fazit
Das Erstellen einer einzigen Legende für alle Subplots verbessert die Klarheit und Lesbarkeit Ihrer Matplotlib-Visualisierungen. Die oben gezeigten Methoden, die fig.legend()
und eine richtige Verwaltung von Handles/Beschriftungen verwenden, bieten Kontrolle über die Platzierung und Darstellung der Legende.
FAQ
- F: Was ist, wenn ich verschiedene Linienstile habe? A: Die Legende spiegelt diese Unterschiede automatisch wider.
- F: Kann ich verschiedene Farben für dieselbe Beschriftung verwenden? A: Ja, aber die Legende zeigt nur eine Farbe pro Beschriftung an. Verwenden Sie eindeutige Beschriftungen, um zu unterscheiden.
- F: Meine Legende überlappt Plots. A: Passen Sie
bbox_to_anchor
,loc
, Schriftgröße oder Abbildungsgröße an.