Wie man eine einzige Legende für alle Teilflächen in Matplotlib erstellt

Jinku Hu 30 Januar 2023
  1. Erstellen einer einzigen Legende für alle Subplots mit der figur.legend Methode in Matplotlib
  2. Eine einzige Legende für alle Subplots mit der Methode figure.legend erstellen, wenn Linien-Handles und Linien in Matplotlib unterschiedlich sind
Wie man eine einzige Legende für alle Teilflächen in Matplotlib erstellt

Die Matplotlib-Figurenklasse verfügt über eine Legendenmethode, mit der die Legende auf Figurenebene, nicht aber auf der Ebene der Nebenhandlung platziert werden kann. Es ist besonders praktisch, wenn das Muster und die Beschriftungen der Linien in allen Unterplots gleich sind.

Erstellen einer einzigen Legende für alle Subplots mit der figur.legend Methode in Matplotlib

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)


for ax in fig.axes:
    ax.plot([0, 10], [0, 10], label="linear")

lines, labels = fig.axes[-1].get_legend_handles_labels()

fig.legend(lines, labels, loc="upper center")

plt.show()

Matplotlib Figure Legend liefert Legenden-Handles-Beschriftungen

lines, labels = fig.axes[-1].get_legend_handles_labels()

Weil wir die Vermutung haben, dass alle Unterhandlungen die gleichen Linien und Bezeichnungen haben, könnten daher Griffe und Bezeichnungen der letzten Axes für die ganze Figur verwendet werden.

Eine einzige Legende für alle Subplots mit der Methode figure.legend erstellen, wenn Linien-Handles und Linien in Matplotlib unterschiedlich sind

Wenn das Linienmuster und die Beschriftungen in den einzelnen Unterplots unterschiedlich sind, aber eine einzige Legende für alle Unterplots erforderlich ist, müssen wir alle Linienhandles und Beschriftungen aus allen Unterplots erhalten.

import matplotlib.pyplot as plt
import numpy as np

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

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

axes[0, 0].plot(x, np.sin(x), color="k", label="sin(x)")
axes[0, 1].plot(x, np.cos(x), color="b", label="cos(x)")
axes[1, 0].plot(x, np.sin(x) + np.cos(x), color="r", label="sin(x)+cos(x)")
axes[1, 1].plot(x, np.sin(x) - np.cos(x), color="m", label="sin(x)-cos(x)")

lines = []
labels = []

for ax in fig.axes:
    axLine, axLabel = ax.get_legend_handles_labels()
    lines.extend(axLine)
    labels.extend(axLabel)


fig.legend(lines, labels, loc="upper right")

plt.show()

Matplotlib Abbildung Legende_alle Labels von get_legend_handles_labels

for ax in fig.axes:
    axLine, axLabel = ax.get_legend_handles_labels()
    lines.extend(axLine)
    labels.extend(axLabel)

Alle Zeilen-Handles und Beschriftungen werden der Liste lines und labels mit der Listen-extend-Methode hinzugefügt, falls mehr Zeilen und Beschriftungen in einem einzigen Unterplot existieren.

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - Matplotlib Legend