Wie man eine einzige Legende für alle Teilflächen in Matplotlib erstellt
-
Erstellen einer einzigen Legende für alle Subplots mit der
figur.legend
Methode in Matplotlib -
Eine einzige Legende für alle Subplots mit der Methode
figure.legend
erstellen, wenn Linien-Handles und Linien in Matplotlib unterschiedlich sind
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()
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()
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.
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