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) ?
Vous pouvez le faire :
plt.show(hold=False)
plt.savefig('name.pdf')
et n'oubliez pas de laisser savefig se terminer avant de fermer l'interface graphique. De cette façon, vous pouvez voir l'image à l'avance.
Vous pouvez également l'examiner avec plt.show()
Fermez ensuite l'interface graphique et exécutez à nouveau le script, mais cette fois remplacez plt.show()
con plt.savefig()
.
Vous pouvez également utiliser
fig, ax = plt.figure(nrows=1, ncols=1)
plt.plot(...)
plt.show()
fig.savefig('out.pdf')
Selon la question Matplotlib (pyplot) savefig produit une image vide .
Une chose à noter : si vous utilisez plt.show
et il devrait l'être après plt.savefig
ou vous obtiendrez une image vierge.
Un exemple détaillé :
import numpy as np
import matplotlib.pyplot as plt
def draw_result(lst_iter, lst_loss, lst_acc, title):
plt.plot(lst_iter, lst_loss, '-b', label='loss')
plt.plot(lst_iter, lst_acc, '-r', label='accuracy')
plt.xlabel("n iteration")
plt.legend(loc='upper left')
plt.title(title)
plt.savefig(title+".png") # should before plt.show method
plt.show()
def test_draw():
lst_iter = range(100)
lst_loss = [0.01 * i + 0.01 * i ** 2 for i in xrange(100)]
# lst_loss = np.random.randn(1, 100).reshape((100, ))
lst_acc = [0.01 * i - 0.01 * i ** 2 for i in xrange(100)]
# lst_acc = np.random.randn(1, 100).reshape((100, ))
draw_result(lst_iter, lst_loss, lst_acc, "sgd_method")
if __name__ == '__main__':
test_draw()
La solution :
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
plt.figure()
ts.plot()
plt.savefig("foo.png", bbox_inches='tight')
Si vous souhaitez afficher l'image tout en l'enregistrant, utilisez la fonction de sauvegarde :
%matplotlib inline
après import matplotlib
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 ?