HOWTO · Matplotlib
Wie man eine einzige Legende für alle Teilflächen in Matplotlib erstellt
Die Figurenklasse Matplotlib verfügt über eine Legendenmethode, mit der die Legende auf der Figurenebene, nicht aber auf der Ebene der Nebenhandlung platziert werden kann. Dies ist besonders praktisch, wenn das Muster und die Beschriftung der Linien bei allen Subplots gleich sind.
Auf dieser Seite
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.