Skip to content

Beheben von Matplotlib savefig, das Labels abschneidet: Eine umfassende Anleitung

Updated on

Sie haben Stunden damit verbracht, das perfekte Diagramm in Matplotlib zu erstellen, nur um festzustellen, dass die Labels abgeschnitten werden, wenn Sie es mit der savefig-Funktion speichern. Das kann frustrierend sein, besonders wenn Ihre xlabel die Höhe von ein paar Textzeilen hat und nicht richtig angezeigt wird. Aber keine Sorge, Sie sind am richtigen Ort gelandet. In diesem Artikel werden wir verschiedene Methoden untersuchen, um das Problem zu beheben, bei dem die savefig-Funktion von Matplotlib Labels abschneidet.

Verständnis des Problems

Bevor wir das Problem lösen, wollen wir zuerst verstehen, warum es auftritt. Es ist üblich, komplexe Labels in wissenschaftlichen oder mathematischen Diagrammen zu verwenden, die oft mit TeX-Formeln dargestellt werden. Diese Labels können "hoch" sein, das heißt, sie erstrecken sich über mehrere Zeilen und führen dazu, dass der untere Teil des Labels im gespeicherten Diagramm abgeschnitten wird. Hier ist ein Beispiel für einen solchen Fall:

import matplotlib.pyplot as plt
 
plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$', fontsize=50)
plt.title('Beispiel mit Matplotlib 3.4.2\nMRE ist kein Problem mehr')
plt.show()

In diesem Beispiel ist das ylabel sichtbar, aber das xlabel wird unten abgeschnitten.

Die Methode subplots_adjust

Eine häufige Lösung für dieses Problem besteht darin, die Ränder des Diagramms mithilfe der Funktion subplots_adjust anzupassen. Die Funktion subplots_adjust kann entweder auf das aktuelle Diagramm, das mit plt.gcf() erhalten wird, oder direkt auf das Diagramm mithilfe von plt.subplots_adjust() angewendet werden. So verwenden Sie es:

plt.gcf().subplots_adjust(bottom=0.15)
# oder
plt.subplots_adjust(bottom=0.15)

Mit dieser Methode wird der untere Rand angepasst, um Platz für das xlabel zu schaffen.

Die Methode tight_layout

Matplotlib hat die Funktion tight_layout eingeführt, die die Subplot-Parameter automatisch anpasst, um einen spezifischen Abstand zu erzeugen. Diese Funktion ist großartig, da sie eine saubere Lösung für das Problem der abgeschnittenen Labels bietet:

fig, axes = plt.subplots(ncols=2, nrows=2, figsize=(8, 6))
axes = axes.flatten()
 
for ax in axes:
    ax.set_ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
    ax.set_xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
 
plt.tight_layout()
plt.show()

Durch Aufrufen von plt.tight_layout() passt Matplotlib automatisch die Achsen der Subplots an, sodass die Labels nicht überlappen und nicht abgeschnitten werden.

Speichern des Diagramms mit bbox_inches='tight'

Eine weitere Möglichkeit, sicherzustellen, dass Labels beim Speichern des Diagramms nicht abgeschnitten werden, besteht darin, bbox_inches='tight' in der savefig-Funktion anzugeben:

plt.savefig('myfile.png', bbox_inches="tight")

Diese Option stellt sicher, dass alle Elemente des Diagramms, einschließlich der Labels, innerhalb der Begrenzungsbox passen, wenn das Diagramm gespeichert wird.

Im nächsten Abschnitt werden wir uns mit den automatischen Layouteinstellungen des Diagramms näher befassen und sehen, wie sie verwendet werden können, um unser Problem zu beheben.

Automatische Layout-Anpassungen

Matplotlib bietet eine Option zur automatischen Anpassung des Layouts Ihrer Diagramme. Dies ist besonders nützlich, wenn Sie möchten, dass Ihr Code konsistente Diagramme auf unterschiedlich konfigurierten Systemen erzeugt. Hier erfahren Sie, wie Sie dies einrichten können:

Aktualisieren von rcParams während der Laufzeit

Sie können die rcParams während der Laufzeit aktualisieren. Dadurch können Sie sicherstellen, dass die Einstellung für die automatische Layoutanpassung aktiviert ist, wenn Ihr Code ausgeführt wird. So geht's:

from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})

Konfigurieren der Matplotlibrc-Datei

Alternativ können Sie die automatische Layoutanpassung direkt in Ihrer matplotlibrc-Datei festlegen:

figure.autolayout : True

Diese Einstellung ist eine gute Möglichkeit, die Konsistenz Ihrer Diagramme auf verschiedenen Systemen und Umgebungen sicherzustellen.

Jetzt sollten Sie ein gutes Verständnis dafür haben, wie Sie das Problem beheben können, bei dem die savefig-Funktion von Matplotlib Labels abschneidet. Denken Sie daran, dass die beste Lösung von Ihren spezifischen Bedürfnissen und Umständen abhängt, also zögern Sie nicht, mit diesen Methoden zu experimentieren, um diejenige zu finden, die am besten für Sie funktioniert.

Alternative zu Matplotlib: Daten mit PyGWalker visualisieren

Neben der Verwendung von Matplotlib zur Visualisierung Ihres Pandas-Datenrahmens gibt es eine alternative, Open-Source-Python-Bibliothek, die Ihnen bei der Erstellung von Datenvisualisierungen hilft: PyGWalker (opens in a new tab).

PyGWalker zur Datenvisualisierung (opens in a new tab)

Sie müssen nicht mehr mit komplizierter Verarbeitung mit Python-Code abschließen. Importieren Sie einfach Ihre Daten und ziehen Sie Variablen, um alle Arten von Datenvisualisierungen zu erstellen! Hier ist ein kurzes Demo-Video zur Bedienung:


So verwenden Sie PyGWalker in Ihrem Jupyter Notebook:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

Alternativ können Sie es in Kaggle Notebook/Google Colab ausprobieren:

Führen Sie PyGWalker in Kaggle Notebook aus (opens in a new tab)Führen Sie PyGWalker in Google Colab aus (opens in a new tab)Geben Sie PyGWalker auf GitHub ein ⭐️ (opens in a new tab)
PyGWalker in Kaggle Notebook ausführen (opens in a new tab)PyGWalker in Google Colab ausführen (opens in a new tab)PyGWalker in Google Colab ausführen (opens in a new tab)

PyGWalker wird durch die Unterstützung unserer Open Source-Community aufgebaut. Vergessen Sie nicht, PyGWalker GitHub (opens in a new tab) zu besuchen und uns einen Stern zu geben!

Häufig gestellte Fragen

  1. Warum werden meine Beschriftungen abgeschnitten, wenn ich die savefig-Funktion in Matplotlib verwende? Dies passiert oft, wenn Ihre Beschriftungen "hoch" sind, z. B. wenn sie mit TeX-Formeln gerendert werden und mehrere Zeilen umfassen. Matplotlib passt die Plot-Ränder nicht automatisch an, um diese Beschriftungen unterzubringen, was zu ihrem Abschneiden führt.

  2. Was ist die tight_layout-Funktion in Matplotlib? Die tight_layout-Funktion ist eine Funktion in Matplotlib, die die Parameter des Subplots automatisch anpasst, um den angegebenen Zwischenraum zu geben. Sie stellt sicher, dass die Beschriftungen nicht überlappen und nicht abgeschnitten werden.

  3. Was bewirkt bbox_inches='tight' in der savefig-Funktion? Die Option bbox_inches='tight' in der savefig-Funktion stellt sicher, dass alle Elemente des Plots, einschließlich Beschriftungen, innerhalb der Begrenzungsbox angeordnet sind, wenn der Plot gespeichert wird. Dadurch wird verhindert, dass Beschriftungen im gespeicherten Bild abgeschnitten werden.