Matplotlib legend()-Funktion


Matplotlib 参考文档Matplotlib-Referenzdokumentation

legend()Wird verwendet, um einem Diagramm eine Legende hinzuzufügen, damit Leser die Bedeutung jeder Kurve oder Datengruppe erkennen können.

Funktionsdefinition

matplotlib.pyplot.legend(*args, **kwargs)
Axes.legend(*args, **kwargs)
Figure.legend(*args, **kwargs)

Allgemeine Parameterbeschreibungen

ParameterTypeBeschreibung
locstr oder intLegendenposition: 'best' (automatisch), 'upper right', 'upper left', 'lower left', 'lower right', 'right', 'center left', 'center right', 'lower center', 'upper center', 'center', 'outside'
bbox_to_anchortupleLegenden-Ankerkoordinaten, verwendet mit loc für präzise Positionierung. Zum Beispiel platziert (1.05, 1) die Legende in der oberen rechten Ecke außerhalb der Axes.
ncolintAnzahl der Legendenspalten, Standard ist 1. Wenn mehrere Einträge vorhanden sind, werden sie in mehreren Spalten angezeigt.
fontsizeint oder strLegenden-Schriftgröße, z. B. 10, 'small', 'large'
frameonboolOb der Legendenrahmen angezeigt werden soll, Standard ist True
shadowboolOb ein Schatteneffekt hinzugefügt werden soll
titlestrDer Titel der Legende
facecolorcolorHintergrundfarbe der Legende
edgecolorcolorRahmenfarbe der Legende
fancyboxboolOb ein abgerundeter Rahmen verwendet werden soll, Standardwert True
markerscalefloatDie Skalierung der Marker in der Legende relativ zu den ursprünglichen Markern
handlelengthfloatDie Länge der Linien in der Legende

Die Legende zeigt nur Artists an, die denlabelParameter gesetzt haben. Eine übliche Vorgehensweise ist, label direkt in Plot-Funktionen wie plot(), scatter(), bar() anzugeben und dann legend() aufzurufen.


Anwendungsbeispiele

Beispiel 1: Einfache Legende

Beispiel

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots(layout='constrained')

# Das Label jeder Kurve wird automatisch in die Legende übernommen
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
ax.plot(x, np.sin(x) * np.exp(-x/3), label='gedämpfte Sinusfunktion')

ax.legend(loc='upper right')  # Alle Labels automatisch sammeln
ax.set_title('Grundlegende Legende')
ax.set_xlabel('x')
ax.grid(True, alpha=0.3)
plt.show()

Beispiel 2: Legende außerhalb des Diagramms + mehrere Spalten

Beispiel

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots(figsize=(8, 4), layout='constrained')

# Mehrere Kurven zeichnen
for i in range(6):
    ax.plot(x, np.sin(x + i * 0.5), label=f'sin(x + {i*0.5:.1f})')

# Legende außerhalb der Achsen platzieren, in zwei Spalten angezeigt
ax.legend(loc='upper left',
          bbox_to_anchor=(1.02, 1),   # Obere rechte Ecke außerhalb
          ncol=2,                      # In zwei Spalten aufteilen
          title='Phasenverschiebung',
          frameon=True,
          fancybox=True,
          shadow=True)

ax.set_title('Legende außerhalb des Diagramms (ncol=2)')
ax.set_xlabel('x')
ax.grid(True, alpha=0.3)
plt.show()

Beispiel 3: Benutzerdefinierte Legendeneinträge

Beispiel

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots(layout='constrained')

ax.plot(x, np.sin(x), 'b-', linewidth=2)
ax.plot(x, np.cos(x), 'r--', linewidth=2)

# Legendeneinträge manuell angeben (nicht mit Plot-Beschriftungen verknüpft)
blue_line = mpatches.Patch(color='blue', label='Sinuswelle')
red_line = mpatches.Patch(color='red', label='Cosine Wave')

ax.legend(handles=[blue_line, red_line],
          loc='upper right',
          fontsize=11)

ax.set_title('Benutzerdefinierte Legenden-Handles')
ax.set_xlabel('x')
ax.grid(True, alpha=0.3)
plt.show()

Beispiel 4: Kurzreferenz zu Legenden-Positionscodes

Beispiel

import matplotlib.pyplot as plt

# Positionen für alle loc-Codes anzeigen
locations = [
    'upper left', 'upper right', 'lower left', 'lower right',
    'center left', 'center right', 'lower center', 'upper center',
    'center'
]

fig, axes = plt.subplots(3, 3, figsize=(10, 8),
                          layout='constrained')
axes = axes.flatten()

for ax, loc in zip(axes, locations):
    ax.plot([0, 1], [0, 1], 'b-', label='Linie A')
    ax.plot([0, 1], [1, 0], 'r--', label='Linie B')
    ax.legend(loc=loc, fontsize=8, title=f'loc="{loc}"')
    ax.set_xticks([])
    ax.set_yticks([])

fig.suptitle('Alle legend() Positionen', fontsize=14)
plt.show()

Häufig gestellte Fragen

Legende wird nicht angezeigt?

Prüfen Sie, ob die Plot-Funktion denlabelParameter gesetzt hat.

Stellen Sie sicher, dass Sie dielegend()Funktion.

Wenn einige Artists nicht in der Legende erscheinen müssen, setzen Sie label auf eine leere Zeichenkette oder '_nolegend_'.

Wie lassen sich die Linienstile in der Legende teilweise ändern?

Verwenden Sielegend.get_lines()um die Linienobjekte in der Legende abzurufen und ihre Eigenschaften zu ändern, oder verwenden Sie diehandler_mapParameter überschrieben werden.


Matplotlib 参考文档Matplotlib-Referenzdokumentation

Andere Erweiterungen