Fonction savefig() de Matplotlib


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ètreTypeDescription
fnamestr ou Path ou file-likeNom de fichier de sortie ou objet fichier. L'extension détermine automatiquement le format, par ex. 'plot.png', 'plot.pdf', 'plot.svg'
dpifloat 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)
formatstrFormat 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_inchesstr ou BboxLimites de recadrage : 'tight' (recadrage serré, supprime les espaces blancs superflus), None (utilise la taille d'origine de la Figure)
pad_inchesfloatMarge intérieure (en pouces) lorsque bbox_inches='tight', valeur par défaut 0.1
facecolorcouleur ou 'auto'Couleur d'arrière-plan de l'image de sortie ; 'auto' utilise la facecolor de la Figure
edgecolorcouleur ou 'auto'Couleur de bordure de l'image de sortie
transparentboolSi True, l'arrière-plan est défini sur transparent (png/svg uniquement)
metadatadictMétadonnées écrites dans le fichier (pris en charge par certains formats)

Doit êtreplt.show()appelé avantsavefig(), car show() efface la Figure. Ou utilisezfig.savefig()Spécifiez l'objet Figure.

Formats de fichier pris en charge

FormatExtensionFonctionnalités
PNG.pngBitmap, prend en charge la transparence, le plus couramment utilisé
PDF.pdfGraphique vectoriel, adapté aux publications, peut être intégré dans LaTeX
SVG.svgGraphique vectoriel, modifiable dans les navigateurs/éditeurs
EPS.epsGraphique vectoriel, format d'édition traditionnel
JPEG.jpg / .jpegBitmap, compression avec perte, taille de fichier réduite mais ne prend pas en charge la transparence
TIFF.tiff / .tifBitmap, sans perte, adapté à l'archivage

Exemples d'utilisation

Exemple 1 : Enregistrement de base

Exemple

import matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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.


Matplotlib 参考文档Documentation de référence de Matplotlib

Autres extensions