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) ?
Lors de l'utilisation de matplotlib.pyplot.savefig
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 donne une sortie tramée ou vectorisée respectivement. En outre, il y a parfois des espaces blancs indésirables autour de l'image, qui peuvent être supprimés avec :
plt.savefig('foo.png', bbox_inches='tight')
Notez que si l'on affiche le tracé, plt.show()
devrait suivre plt.savefig()
; sinon, l'image du fichier sera vide.
@Asmageddon In plt.savefig
Vous pouvez modifier la résolution (dpi), voir le lien dans la réponse. Les dimensions peuvent être contrôlées lors de la création de la figure, voir figsize
en matplotlib.org/api/figure_api.html#matplotlib.figure.Figure
@Hooked plt.savefig sauvegarde la figure mais n'empêche pas de l'afficher. Même lorsque je laisse de côté plt.show(), la figure est affichée. Comment puis-je empêcher cela ?
Comme d'autres l'ont dit, plt.savefig()
o fig1.savefig()
est en effet le moyen d'enregistrer une image.
Cependant, j'ai constaté que dans certains cas le chiffre est toujours affiché . (par exemple, avec Spyder ayant plt.ion()
: mode interactif = Activé). Je contourne ce problème en utilisant en forçant la fenêtre de la figure à se fermer avec :
plt.close(figure_object)
(voir la documentation ). De cette façon, je n'ai pas un million de chiffres ouverts pendant une grande boucle. Exemple d'utilisation :
import matplotlib.pyplot as plt
fig, ax = plt.subplots( nrows=1, ncols=1 ) # create figure & 1 axis
ax.plot([0,1,2], [10,20,3])
fig.savefig('path/to/save/image/to.png') # save the figure to file
plt.close(fig) # close the figure window
Vous devriez être en mesure de rouvrir le chiffre plus tard si nécessaire avec fig.show()
(je ne l'ai pas testé moi-même).
Je viens de trouver ce lien sur la documentation de MatPlotLib qui traite exactement de ce problème : http://matplotlib.org/faq/howto_faq.html#generate-images-without-having-a-window-appear
Selon eux, le moyen le plus simple d'empêcher l'apparition de la figure est d'utiliser un backend non interactif (par exemple Agg), par le biais de matplotib.use(<backend>)
, par exemple :
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.savefig('myfig')
Personnellement, je préfère encore utiliser plt.close( fig )
Depuis lors, vous avez la possibilité de masquer certains chiffres (pendant une boucle), mais de continuer à afficher les chiffres pour le traitement des données après la boucle. Cette solution est probablement plus lente que le choix d'un backend non interactif - il serait intéressant que quelqu'un la teste.
MISE À JOUR pour Spyder, vous ne pouvez généralement pas définir le backend de cette manière (parce que Spyder charge généralement matplotlib au début, ce qui vous empêche d'utiliser matplotlib.use()
).
Au lieu de cela, utilisez plt.switch_backend('Agg')
ou Éteindre " permettre le soutien "dans les préférences de Spyder et lancez le programme matplotlib.use('Agg')
commandez vous-même.
Ce n'est qu'un exemple, qui montre que si vous avez un objet image ( img
), puis vous pouvez l'enregistrer dans un fichier avec .imsave()
méthode.
@wonder.mice permettrait de montrer comment créer une image sans utiliser la figure actuelle.
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 ?