HOWTO · Matplotlib

Wie man den Abstand zwischen Subplots in Matplotlib ändert

Verwenden Sie tight_layout(), subplots_adjust(), subplot_tool() oder constrained_layout=True, um die Abstände in Matplotlib-Figuren mit vielen Subplots zu verbessern.

Auf dieser Seite

Damit eine Matplotlib-Abbildung mit vielen Subplots besser lesbar ist, wählen Sie die Layoutsteuerung, die zu Ihrem Arbeitsablauf passt: Rufen Sie tight_layout() auf, um Platz für Subplot-Elemente automatisch anzupassen, verwenden Sie plt.subplots_adjust() für Abstände und Abbildungsränder, öffnen Sie plt.subplot_tool() für interaktive Anpassungen oder aktivieren Sie constrained_layout=True beim Erstellen der Subplots. Diese Methoden passen das Layout an. Wenn jede Achse mehr Platz benötigt, können Sie zusätzlich die Abbildungsgröße erhöhen oder die Zahl der Zeilen und Spalten ändern.

Subplot-Überlappungen mit tight_layout() vermeiden

Rufen Sie fig.tight_layout() auf, nachdem Sie Diagramme, Beschriftungen und Titel hinzugefügt haben. Die Methode passt die Positionen der Subplots an, damit Elemente wie Achsenbeschriftungen und Titel Platz haben. Sie ist ein guter erster Ansatz, wenn die Standardanordnung überladen wirkt; bei komplexen Abbildungselementen lässt sich damit jedoch nicht jedes Layoutproblem beheben.

Dieses vollständige Beispiel erstellt vier Diagramme mit Titeln in einem 2-mal-2-Raster und passt anschließend das Layout automatisch an. Die Titel in der unveränderten Codebeispiel-Ausgabe sind auf Englisch, darunter „Sine function“ und „Cosine function“:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 100)
series = [
    (np.sin(x), "Sine function"),
    (np.cos(x), "Cosine function"),
    (1 / (1 + np.exp(-x)), "Sigmoid function"),
    (np.exp(x), "Exponential function"),
]

fig, axes = plt.subplots(2, 2)
for ax, (values, title) in zip(axes.flat, series):
    ax.plot(x, values)
    ax.set_title(title)

fig.tight_layout()
plt.show()

Führen Sie das Beispiel in einer Python-Umgebung aus, in der NumPy und Matplotlib installiert sind. Das Layout wird angepasst, nachdem die Titel und die gezeichneten Daten hinzugefügt wurden.

Subplot-Abstände und Ränder mit plt.subplots_adjust() festlegen

Mit plt.subplots_adjust() können Sie die Abstände zwischen den Achsen und den Platz um das Raster gezielt steuern. wspace legt den horizontalen Abstand als Anteil der durchschnittlichen Achsenbreite fest; hspace legt den vertikalen Abstand als Anteil der durchschnittlichen Achsenhöhe fest. Die Werte left, right, bottom und top bestimmen die Ränder des Subplot-Bereichs als Anteile der Abbildungsbreite beziehungsweise -höhe.

Das folgende Beispiel verwendet dieselbe Anordnung mit vier Diagrammen und vergrößert den Abstand zwischen den Zeilen:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 100)
series = [
    (np.sin(x), "Sine function"),
    (np.cos(x), "Cosine function"),
    (1 / (1 + np.exp(-x)), "Sigmoid function"),
    (np.exp(x), "Exponential function"),
]

fig, axes = plt.subplots(2, 2)
for ax, (values, title) in zip(axes.flat, series):
    ax.plot(x, values)
    ax.set_title(title)

fig.subplots_adjust(left=0.12, right=0.95, bottom=0.12, top=0.9, wspace=0.25, hspace=0.4)
plt.show()

Erhöhen Sie wspace oder hspace, um den jeweiligen Abstand zu vergrößern. Mit den vier Randwerten schaffen Sie mehr Platz um das Subplot-Raster, etwa wenn Beschriftungen zusätzlichen Raum benötigen. Diese Einstellungen steuern die Anordnung der Achsen innerhalb der Abbildung. Wenn die gesamte Abbildung mehr Platz braucht, ändern Sie figsize in plt.subplots().

Subplot-Layout interaktiv mit plt.subplot_tool() anpassen

plt.subplot_tool() öffnet ein Matplotlib-Fenster mit Reglern zum Anpassen der Subplot-Abstände und -Ränder. Das ist hilfreich, wenn Sie das Layout einer Abbildung visuell abstimmen und die gewählten Einstellungen anschließend in Ihr Skript übernehmen möchten. Das Werkzeug benötigt ein interaktives Matplotlib-Backend und eine grafische Umgebung. Es eignet sich weder zum Anpassen eines statischen Bildes noch für eine Plot-Sitzung ohne grafische Oberfläche.

Erstellen Sie in einer interaktiven Sitzung mit grafischer Oberfläche die Abbildung und rufen Sie plt.subplot_tool(fig) mit dieser Abbildung auf. Der Aufruf setzt einen Matplotlib-Canvas-Manager mit zugehöriger Werkzeugleiste voraus. Nicht-interaktive Backends, wie sie beim Rendern ohne grafische Oberfläche verwendet werden, stellen diese Werkzeugleiste nicht bereit; dort lässt sich das Werkzeug daher nicht öffnen. Das interaktive Beispiel ist bewusst nicht als ausführbares Skript für eine Umgebung ohne grafische Oberfläche dargestellt.

Verwenden Sie die Steuerelemente des Werkzeugs, um die Subplot-Parameter während der Ansicht der Abbildung anzupassen. Wenn die Anordnung passt, übernehmen Sie die entsprechenden Werte für wspace, hspace und die Ränder mit plt.subplots_adjust() in den Code, damit sich das Ergebnis reproduzieren lässt.

constrained_layout=True beim Erstellen der Subplots aktivieren

Wenn eine Abbildung den verfügbaren Platz beim Zeichnen automatisch anordnen soll, übergeben Sie constrained_layout=True beim Aufruf von plt.subplots(). Die Layout-Engine berücksichtigt Elemente der Subplots wie Titel und Beschriftungen. Aktivieren Sie die Option beim Erstellen der Abbildung. Sie soll das Layout während des Zeichnens verwalten; bei komplexen Elementen können dennoch manuelle Anpassungen nötig sein. Weitere Informationen finden Sie im Matplotlib-Leitfaden zu constrained layout.

import numpy as np
import matplotlib.pyplot as plt

a = np.linspace(0, 5, 100)
figure, axes = plt.subplots(2, 2, constrained_layout=True)

axes[0, 0].plot(a, np.exp(a))
axes[0, 1].plot(a, np.sin(a))
axes[1, 0].plot(a, np.cos(a))
axes[1, 1].plot(a, a ** 2)

for index, ax in enumerate(axes.flat, start=1):
    ax.set_title(f"Subplot {index}")

plt.show()

Alle vier Ansätze helfen dabei, das Subplot-Layout zu steuern, eignen sich aber für unterschiedliche Arbeitsabläufe: Verwenden Sie tight_layout() für eine schnelle automatische Anpassung nach dem Hinzufügen der Inhalte, plt.subplots_adjust() für explizite Werte, plt.subplot_tool() für interaktive Anpassungen und constrained_layout=True beim Erstellen einer Abbildung, deren Abstände automatisch verwaltet werden sollen.