1411 votes

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

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) ?

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 appeler fig = plt.figure() puis fig.savefig(...) .

15voto

Nutcracker Points 309

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')

14voto

Jayhello Points 703

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()

enter image description here

13voto

Durgesh satam Points 121

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

10voto

Lors de l'utilisation de matplotlib.pyplot Pour cela, vous devez d'abord sauvegarder votre tracé et le fermer en utilisant ces deux lignes :

fig.savefig('plot.png') # save the plot, place the path you want to save the figure in quotation
plt.close(fig) # close the figure window

8voto

Punnerud Points 362
import matplotlib.pyplot as plt
plt.savefig("image.png")

Dans Jupyter Notebook, vous devez supprimer plt.show() et ajouter plt.savefig() avec le reste du code plt dans une cellule. L'image apparaîtra toujours dans votre carnet de notes.

Prograide.com

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.

Powered by:

X