Enregistrer le tracé dans un fichier image au lieu de l'afficher avec Matplotlib

Je suis en train d'écrire un script simple et rapide pour générer des graphiques à la volée. J'utilise le code ci-dessous (issu de la documentation de [Matplotlib][1]) comme point de départ :

from pylab import figure, axes, pie, title, show

# Make a square figure and axes
figure(1, figsize=(6, 6))
ax = axes([0.1, 0.1, 0.8, 0.8])

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]

explode = (0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5})

show()  # Actually, don't show, just save to foo.png

Je ne souhaite pas afficher le tracé sur une interface graphique, mais plutôt l'enregistrer dans un fichier (disons foo.png), afin de pouvoir l'utiliser, par exemple, dans des scripts batch. Comment puis-je faire cela ?

[1] : http://en.wikipedia.org/wiki/Matplotlib

Solution

Bien que la question ait reçu une réponse, j&#8217aimerais ajouter quelques conseils utiles pour l&#8217utilisation de [matplotlib.pyplot.savefig][1]. Le format du fichier peut être spécifié par l'extension :

from matplotlib import pyplot as plt

plt.savefig('foo.png')
plt.savefig('foo.pdf')

Cela donnera respectivement une sortie rasterisée ou vectorisée, qui peuvent toutes deux être utiles. De plus, vous trouverez que pylab laisse un espace généreux, souvent indésirable, autour de l'image. Supprimez-le avec :

savefig('foo.png', bbox_inches='tight')

[1] : https://matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html#matplotlib.pyplot.savefig

Commentaires (8)

La solution est la suivante :

pylab.savefig('foo.png')
Commentaires (0)

Si vous n&#8217aimez pas le concept de la figure "actuelle", faites-le :

import matplotlib.image as mpimg

img = mpimg.imread("src.png")
mpimg.imsave("out.png", img)
Commentaires (5)