Fonction savefig() de Matplotlib
Documentation de référence de Matplotlib
savefig()Utilisé pour enregistrer la Figure actuelle dans un fichier image, avec prise en charge des formats PNG, PDF, SVG, EPS et d'autres formats.
C'est la méthode principale pour exporter des graphiques Matplotlib vers des fichiers qui peuvent être partagés et intégrés dans des documents.
Définition de fonction
Interface pyplot
matplotlib.pyplot.savefig(fname, *, dpi='figure', format=None,
metadata=None, bbox_inches=None, pad_inches=0.1, facecolor='auto',
edgecolor='auto', backend=None, **kwargs)
Méthode de Figure
Figure.savefig(fname, *, dpi='figure', format=None, metadata=None,
bbox_inches=None, pad_inches=0.1, facecolor='auto',
edgecolor='auto', backend=None, **kwargs)
Description du paramètre
| Paramètre | Type | Description |
|---|---|---|
| fname | str ou Path ou file-like | Nom de fichier de sortie ou objet fichier. L'extension détermine automatiquement le format, par ex. 'plot.png', 'plot.pdf', 'plot.svg' |
| dpi | float ou 'figure' | Résolution de sortie (points par pouce). 'figure' utilise le dpi de la Figure. Valeurs courantes : 72 (écran), 150 (général), 300 (impression) |
| format | str | Format de sortie, par ex. 'png', 'pdf', 'svg', 'eps', 'jpg'. S'il n'est pas spécifié, il est déduit du nom de fichier |
| bbox_inches | str ou Bbox | Limites de recadrage : 'tight' (recadrage serré, supprime les espaces blancs superflus), None (utilise la taille d'origine de la Figure) |
| pad_inches | float | Marge intérieure (en pouces) lorsque bbox_inches='tight', valeur par défaut 0.1 |
| facecolor | couleur ou 'auto' | Couleur d'arrière-plan de l'image de sortie ; 'auto' utilise la facecolor de la Figure |
| edgecolor | couleur ou 'auto' | Couleur de bordure de l'image de sortie |
| transparent | bool | Si True, l'arrière-plan est défini sur transparent (png/svg uniquement) |
| metadata | dict | Métadonnées écrites dans le fichier (pris en charge par certains formats) |
Doit être
plt.show()appelé avantsavefig(), car show() efface la Figure. Ou utilisezfig.savefig()Spécifiez l'objet Figure.
Formats de fichier pris en charge
| Format | Extension | Fonctionnalités |
|---|---|---|
| PNG | .png | Bitmap, prend en charge la transparence, le plus couramment utilisé |
| Graphique vectoriel, adapté aux publications, peut être intégré dans LaTeX | ||
| SVG | .svg | Graphique vectoriel, modifiable dans les navigateurs/éditeurs |
| EPS | .eps | Graphique vectoriel, format d'édition traditionnel |
| JPEG | .jpg / .jpeg | Bitmap, compression avec perte, taille de fichier réduite mais ne prend pas en charge la transparence |
| TIFF | .tiff / .tif | Bitmap, sans perte, adapté à l'archivage |
Exemples d'utilisation
Exemple 1 : Enregistrement de base
Exemple
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(x, np.sin(x), label='sin(x)')
ax.set_title('Démo d'enregistrement de figure')
ax.legend()
# Enregistrer au format PNG
fig.savefig('example_plot.png')
print("exemple : enregistré sous example_plot.png")
# Enregistrer au format PDF (vectoriel)
fig.savefig('example_plot.pdf')
print("exemple : enregistré sous example_plot.pdf")
plt.show()
Exemple 2 : Sortie haute définition + rognage serré
Exemple
import numpy as np
fig, ax = plt.subplots(figsize=(8, 4))
x = np.linspace(0, 2*np.pi, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
ax.set_title('Sortie haute résolution')
ax.set_xlabel('Angle (rad)')
ax.legend(loc='outside') # Placer la légende à l'extérieur
# dpi=300 : qualité haute définition (adaptée à l'impression)
# bbox_inches='tight' : rognage automatique pour garantir que la légende ne dépasse pas la limite
fig.savefig('example_hires.png', dpi=300, bbox_inches='tight')
print("exemple : image haute résolution enregistrée")
plt.show()
Exemple 3 : Fond transparent + différents formats
Exemple
import numpy as np
fig, ax = plt.subplots(figsize=(6, 4))
# Définir un fond sombre pour démontrer l'effet de transparence
fig.patch.set_facecolor('#2c3e50')
ax.set_facecolor('#34495e')
ax.plot(np.random.randn(100).cumsum(),
color='#1A6BBC', linewidth=2)
ax.set_title('Fond transparent',
color='white', fontsize=14)
ax.tick_params(colors='white')
# PNG avec fond transparent
fig.savefig('example_transparent.png',
transparent=True, # Arrière-plan transparent
dpi=150, bbox_inches='tight')
# SVG peut aussi être transparent
fig.savefig('example_transparent.svg',
transparent=True,
bbox_inches='tight')
print("exemple : images transparentes enregistrées")
plt.show()
Exemple 4 : Enregistrement par lots de plusieurs sous-graphiques
Exemple
import numpy as np
# Créer une grande figure contenant plusieurs graphiques
data = np.random.randn(4, 100)
for i in range(4):
fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(data[i].cumsum(), color=f'C{i}', linewidth=2)
ax.set_title(f'Série {i+1}')
ax.set_xlabel('Étape')
ax.set_ylabel('Somme cumulative')
ax.grid(True, alpha=0.3)
# Enregistrement par lots, le nom de fichier contient l'index
fig.savefig(f'example_series_{i+1}.png',
dpi=200, bbox_inches='tight')
plt.close(fig) # Fermer pour éviter l'affichage
print("exemple : 4 figures enregistrées (series_1 à series_4)")
FAQ
L'image enregistrée est vide ?
Vérifiez si savefig() est appelée après show(). show() peut effacer la Figure.
Solution : appelez savefig() avant show(), ou utilisezfig.savefig()Spécifiez l'objet Figure.
Le texte/les étiquettes de l'image sont coupés ?
Utiliserbbox_inches='tight'recadrage automatique pour garantir que tous les éléments se trouvent dans l'image.
Si le problème persiste, vous pouvez augmenter lapad_inchesvaleur du paramètre.
Autres extensions