web-dev-qa-db-fra.com

Pourquoi mon plt.savefig ne fonctionne pas?

J'ai un simple code python comme suit:

import numpy as np
import matplotlib.pyplot as plt

"""
Here are the solutions and the plot.
"""

# Create the axis and plot.
plt.axis([0, 10, 0, 10])
axis_x = range(1, 11)
grd = [1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 8.1, 9.1, 10.1]
grd2 = [1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 8.2, 9.2, 10.2]
plt.plot(axis_x, grd, '-g', label='BR1')
plt.plot(axis_x, grd2, '-b', label='BR2')
plt.legend(loc='upper left')
plt.grid()
plt.show()

# Save the results vector to a text file.
np.savetxt('test.out', (grd, grd2))

# Save the figure as '.eps' file.
plt.savefig('expl.pdf', format='pdf', dpi=1200)

Lorsque j'ouvre les fichiers de sortie expl.pdf et/ou test.out Je les trouve vides et rien dedans. Pourquoi?

Merci.

19
Jika

Lorsque vous fermez l'image affichée par plt.show(), l'image est fermée et libérée de la mémoire.

Vous devez appeler savefig et savetxt avant d'appeler show.

43
shx2

Votre tracé ne peut pas être généré car vous avez défini la liste axis_x Ayant uniquement la longueur 9, tandis que grd et grd2 Ont la longueur égale à 10. Remplacez simplement la définition de axis_x Avec:

axis_x=range(1,11) et votre tracé apparaîtra et il sera enregistré OK.

2
xecafe

Je viens de rencontrer le même problème et la résolution était de mettre la commande savefig avant l'instruction plt.show(), mais de spécifier le type de fichier explicitement. Voici mon code:

plt.suptitle("~~~~")
plt.title("~~~~")
ax = sns.boxplot(x=scores_df.score, y=scores_df.response)
plt.savefig("test.png", **format="png"**)
plt.show()

plt.close()
1
bmc