Cela permet d'afficher la figure dans une interface graphique :
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
plt.show()
Mais comment puis-je enregistrer la figure dans un fichier (par exemple foo.png) ?
Cela permet d'afficher la figure dans une interface graphique :
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
plt.show()
Mais comment puis-je enregistrer la figure dans un fichier (par exemple foo.png) ?
import datetime
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
# Create the PdfPages object to which we will save the pages:
# The with statement makes sure that the PdfPages object is closed properly at
# the end of the block, even if an Exception occurs.
with PdfPages('multipage_pdf.pdf') as pdf:
plt.figure(figsize=(3, 3))
plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o')
plt.title('Page One')
pdf.savefig() # saves the current figure into a pdf page
plt.close()
plt.rc('text', usetex=True)
plt.figure(figsize=(8, 6))
x = np.arange(0, 5, 0.1)
plt.plot(x, np.sin(x), 'b-')
plt.title('Page Two')
pdf.savefig()
plt.close()
plt.rc('text', usetex=False)
fig = plt.figure(figsize=(4, 5))
plt.plot(x, x*x, 'ko')
plt.title('Page Three')
pdf.savefig(fig) # or you can pass a Figure object to pdf.savefig
plt.close()
# We can also set the file's metadata via the PdfPages object:
d = pdf.infodict()
d['Title'] = 'Multipage PDF Example'
d['Author'] = u'Jouni K. Sepp\xe4nen'
d['Subject'] = 'How to create a multipage pdf file and set its metadata'
d['Keywords'] = 'PdfPages multipage keywords author title subject'
d['CreationDate'] = datetime.datetime(2009, 11, 13)
d['ModDate'] = datetime.datetime.today()
J'ai utilisé les éléments suivants :
import matplotlib.pyplot as plt
p1 = plt.plot(dates, temp, 'r-', label="Temperature (celsius)")
p2 = plt.plot(dates, psal, 'b-', label="Salinity (psu)")
plt.legend(loc='upper center', numpoints=1, bbox_to_anchor=(0.5, -0.05), ncol=2, fancybox=True, shadow=True)
plt.savefig('data.png')
plt.show()
plt.close()
J'ai trouvé très important d'utiliser plt.show après avoir sauvegardé la figure, sinon cela ne fonctionnera pas. figure exportée en png
Les autres réponses sont correctes. Cependant, il m'arrive parfois de vouloir ouvrir la figure objet plus tard. Par exemple, je pourrais vouloir modifier la taille des étiquettes, ajouter une grille ou effectuer d'autres traitements. Dans un monde parfait, il me suffirait de réexécuter le code générant le tracé et d'adapter les paramètres. Hélas, le monde n'est pas parfait. C'est pourquoi, en plus de l'enregistrement au format PDF ou PNG, j'ajoute :
with open('some_file.pkl', "wb") as fp:
pickle.dump(fig, fp, protocol=4)
Ainsi, je peux charger ultérieurement l'objet figure et manipuler les paramètres à ma guise.
J'écris également la pile avec le code source et les locals()
pour chaque fonction/méthode de la pile, de sorte que je puisse ultérieurement savoir exactement ce qui a généré la figure.
NB : Soyez prudent, car cette méthode génère parfois des fichiers volumineux.
Après avoir utilisé la fonction plot() et d'autres fonctions pour créer le contenu souhaité, vous pouvez utiliser une clause comme celle-ci pour choisir entre le traçage à l'écran ou dans un fichier :
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(4, 5)) # size in inches
# use plot(), etc. to create your plot.
# Pick one of the following lines to uncomment
# save_file = None
# save_file = os.path.join(your_directory, your_file_name)
if save_file:
plt.savefig(save_file)
plt.close(fig)
else:
plt.show()
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
91 votes
Il semble que j'ai trouvé la réponse : its pylab.savefig('foo.png')
2 votes
Le lien devrait peut-être renvoyer vers quelque part dans matplotlib.org ?
45 votes
De plus, si l'on n'utilise pas pylab, l'objet figure a une fonction
savefig
également. Vous pouvez donc appelerfig = plt.figure()
puisfig.savefig(...)
.32 votes
De nombreuses réponses plus bas dans la page mentionnent
plt.close(fig)
ce qui est particulièrement important dans les grandes boucles. Sinon, les figures restent ouvertes et en attente dans la mémoire et toutes les figures ouvertes seront affichées lors de l'exécution de la commandeplt.show()
0 votes
Nb : matplotlib.pyplot est préférable : stackoverflow.com/questions/11469336/
0 votes
Voici une bonne ressource pour répondre à cette question : showmecode.info/matplotlib/figure/save-img
0 votes
pylab
ne doit plus être utilisé : Quelle est la méthode recommandée pour tracer des graphiques : matplotlib ou pylab ?