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).
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:
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
-
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. -
Was ist die
tight_layout
-Funktion in Matplotlib? Dietight_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. -
Was bewirkt
bbox_inches='tight'
in dersavefig
-Funktion? Die Optionbbox_inches='tight'
in dersavefig
-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.