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) ?
En plus des éléments ci-dessus, j'ai ajouté __file__
pour le nom afin que l'image et le fichier Python aient les mêmes noms. J'ai également ajouté quelques arguments pour l'améliorer :
# Saves a PNG file of the current graph to the folder and updates it every time
# (nameOfimage, dpi=(sizeOfimage),Keeps_Labels_From_Disappearing)
plt.savefig(__file__+".png",dpi=(250), bbox_inches='tight')
# Hard coded name: './test.png'
Juste une note supplémentaire parce que je ne peux pas encore commenter les messages.
Si vous utilisez plt.savefig('myfig')
ou quelque chose de ce genre, assurez-vous d'ajouter un élément plt.clf()
après l'enregistrement de l'image. En effet, savefig ne ferme pas le graphe et si vous ajoutez des éléments au graphe après sans avoir mis un plt.clf()
vous ajouterez à l'intrigue précédente.
Vous ne le remarquerez peut-être pas si vos tracés sont similaires, car le tracé sera superposé au tracé précédent, mais si vous enregistrez vos chiffres en boucle, le tracé deviendra lentement massif et rendra votre script très lent.
Étant donné qu'aujourd'hui (ce n'était pas le cas lorsque cette question a été posée), de nombreuses personnes utilisent Jupyter Notebook comme console python, il existe un moyen extrêmement simple de sauvegarder les tracés en tant que .png
il suffit d'appeler le matplotlib
's pylab
de Jupyter Notebook, tracer la figure "en ligne" dans les cellules de Jupyter, puis faire glisser cette figure/image dans un répertoire local. N'oubliez pas %matplotlib inline
dès la première ligne !
Comme nous l'avons suggéré précédemment, vous pouvez soit utiliser :
import matplotlib.pyplot as plt
plt.savefig("myfig.png")
Pour enregistrer l'image IPhython que vous affichez. Dans un autre ordre d'idée (sous un angle différent), si vous avez l'occasion de travailler avec open cv, ou si vous avez importé open cv, vous pouvez opter pour :
import cv2
cv2.imwrite("myfig.png",image)
Mais c'est juste au cas où vous auriez besoin de travailler avec Open CV. Sinon, il n'y a pas d'autre solution. plt.savefig()
devrait suffire.
Je recommande l'utilisation de wrappers pour le rendu ou le contrôle du tracé. des exemples peuvent être mpltex ( https://github.com/liuyxpp/mpltex ) ou prettyplotlib ( https://github.com/olgabot/prettyplotlib ).
import mpltex
@mpltex.acs_decorator
def myplot():
plt.figure()
plt.plot(x,y,'b-',lable='xxx')
plt.tight_layout(pad=0.5)
plt.savefig('xxxx') # the figure format was controlled by the decorator, it can be either eps, or pdf or png....
plt.close()
J'utilise beaucoup ce décorateur pour publier des articles académiques dans diverses revues de l'American Chemical Society, de l'American Physics Society, de l'Opticcal Society American, de l'Elsivier, etc.
L'image suivante en est un exemple ( https://github.com/MarkMa1990/gradientDescent ) :
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 ?