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

  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

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.

Verwandter Artikel - Matplotlib Legend

  • Titel der Matplotlib-Legende