Data Visualization

Matplotlib Legenden meistern: Eine einheitliche Legende für alle Subplots erstellen

Spread the love

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

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert