Corriger les labels coupés par savefig dans Matplotlib : Guide complet 2025
Updated on

Si vous avez déjà créé un graphique Matplotlib qui rendait parfaitement dans votre notebook — mais qui était coupé, tronqué ou avec des labels manquants après l’export avec savefig() — vous n’êtes pas seul.
C’est l’une des frustrations les plus fréquentes avec Matplotlib, en particulier lorsque vous utilisez :
- Des labels rendus avec LaTeX et très hauts
- Des titres sur plusieurs lignes
- Des labels de graduations longs ou pivotés
- Des sous-graphiques avec un espacement très serré
Dans ce guide mis à jour, vous allez découvrir toutes les méthodes fiables pour que vos figures sauvegardées incluent toujours labels, titres et annotations — avec des bonnes pratiques modernes sur lesquelles vous pouvez compter.
🧠 Pourquoi ce problème apparaît
Matplotlib n’agrandit pas automatiquement la zone de la figure lorsque les labels dépassent des axes.
Les causes courantes incluent :
- Des expressions de style LaTeX qui produisent des symboles très hauts
- Des valeurs de
fontsizeimportantes - Des labels de graduations longs ou pivotés
- Des grilles de sous-graphiques très serrées
Exemple :

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('Example with matplotlib 3.4.2\nLabel clipping example')
plt.show()Le label de l’axe Y est visible, mais celui de l’axe X sera souvent coupé dans la figure sauvegardée.
✅ 1. Meilleure solution moderne (recommandée) : utiliser constrained_layout=True
Depuis Matplotlib 3.6+ (et toujours en 3.8+ en 2025), la méthode de mise en page recommandée est :
fig, ax = plt.subplots(constrained_layout=True)Exemple :

fig, ax = plt.subplots(figsize=(7, 5), constrained_layout=True)
ax.set_xlabel("Very long bottom label that usually gets clipped", fontsize=16)
ax.set_ylabel("Tall math label:\n$\\frac{x_a - x_b}{x_c}$")
fig.savefig("figure.png")✔ Avantages
- Moderne et stable
- Fonctionne mieux que
tight_layout() - Gère bien colorbars, légendes et sous-graphiques
⚠ Inconvénients
- Légèrement plus lent sur de grandes grilles de sous-graphiques
Si vous écrivez du nouveau code Matplotlib en 2025, cela devrait être votre choix par défaut.
✅ 2. Ajuster les marges manuellement avec subplots_adjust
Une méthode toujours simple et efficace :
plt.subplots_adjust(bottom=0.15)Ou directement sur la figure :
plt.gcf().subplots_adjust(bottom=0.18)Augmentez la valeur de marge jusqu’à ce que les labels ne se chevauchent plus.

✅ 3. Utiliser tight_layout() (plus ancien mais encore utile)
tight_layout() ajuste automatiquement les espacements :
fig, axes = plt.subplots(ncols=2, nrows=2, figsize=(8, 6))
for ax in axes.flatten():
ax.set_xlabel("Example X label")
ax.set_ylabel("Example Y label")
plt.tight_layout()
plt.show()Remarques
- Bon pour les graphiques simples
- Peut mal gérer les légendes et colorbars
constrained_layout=Trueest maintenant la solution à privilégier
✅ 4. Sauvegarder avec bbox_inches="tight" (excellent correctif rapide)
Une solution très utilisée contre le rognage :
plt.savefig("myfile.png", bbox_inches="tight")Quand l’utiliser
- Correctif rapide sans modifier la mise en page
- Garantit que tout ce qui apparaît à l’écran apparaît aussi dans le fichier

✅ 5. Activer la mise en page automatique avec rcParams
Si vous voulez une solution permanente qui s’applique à tous les graphiques :

Mettre à jour rcParams à l’exécution :
from matplotlib import rcParams
rcParams.update({"figure.autolayout": True})OU configurer matplotlibrc :
figure.autolayout : TrueCela aide à garantir un rendu cohérent entre différentes machines.
📌 Tableau récapitulatif : quelle méthode utiliser ?
| Méthode | Quand l’utiliser | Idéal pour |
|---|---|---|
constrained_layout=True | **Choix par défaut ** | Mise en page moderne, subplots, légendes |
bbox_inches='tight' | Correctif rapide lors de la sauvegarde | Export de graphiques simples |
tight_layout() | Code existant / hérité | Grilles de sous-graphiques simples |
subplots_adjust() | Vous voulez un contrôle manuel total | Ajustements de type publication |
figure.autolayout=True | Valeur par défaut à l’échelle d’un projet | Cohérence entre systèmes |
💡 Conseils supplémentaires pour des figures impeccables
✔ Utiliser un DPI plus élevé pour réduire les découpes avec des labels longs
plt.savefig("fig.png", dpi=200, bbox_inches="tight")✔ Éviter les tailles de police énormes sauf nécessité
Des polices très grandes augmentent le risque de rognage des labels.
✔ Pour les colorbars : utiliser constrained_layout
Cela fonctionne nettement mieux que tight_layout.
📊 Créer des visualisations sans ajuster la mise en page à la main (PyGWalker)
Si vous utilisez Matplotlib surtout pour visualiser des DataFrames, vous n’avez peut‑être plus besoin d’ajuster manuellement les mises en page.
Vous pouvez simplement :
- Charger votre DataFrame
- Glisser‑déposer les champs
- Générer instantanément les graphiques
En utilisant PyGWalker, un outil de visualisation open‑source :
Voici comment l’utiliser :
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)Ou essayez‑le en ligne :
| Kaggle | Google Colab | GitHub |
|---|---|---|
![]() | ![]() | ![]() |
❓ Foire aux questions
-
Pourquoi mes labels sont-ils coupés quand je sauvegarde une figure Matplotlib ?
Parce que Matplotlib n’agrandit pas automatiquement la zone de la figure lorsque les labels dépassent les limites des axes. C’est fréquent avec des labels LaTeX ou du texte pivoté. -
Quelle méthode corrige le plus fiablement le rognage des labels en 2025 ?
Utilisezconstrained_layout=Truepour du code moderne, oubbox_inches='tight'comme correctif rapide lors de l’export. -
Que fait
bbox_inches="tight"?
Cela recalcule la boîte englobante lors de la sauvegarde, en s’assurant que tous les éléments textuels sont inclus.



