web-dev-qa-db-fra.com

Matplotlib Savefig n'écrasera PAS les anciens fichiers

Il semble que ce soit un problème d'autorisations sur ma machine. Après une mise à jour des systèmes sur Windows 10, lorsque j'exécute:

import matplotlib.pyplot as plt
#make figure
plt.plot([1,2,3,4])
plt.ylabel('some numbers')

#save
plt.savefig("./figs/my_plot.jpg")

Il créera la figure lors de la première exécution du code. Si j'apporte une modification au code (par exemple, changez d'étiquette) puis que je réexécute, le tracé affiché dans un bloc-notes Jupyter est mis à jour, mais le fichier enregistré sur ma machine ne l'est pas! Il s'agit d'un nouveau problème à compter d'aujourd'hui, après la mise à jour d'une mise à jour des systèmes, donc cela semble être un coupable probable. Avez-vous une idée pour résoudre ce problème, en plus de créer un nouveau nom de fichier chaque fois qu'un changement est effectué?

10
EHB

Cela peut être simple et stupide, mais je vais juste faire ce qui suit:

import os
import matplotlib.pyplot as plt
#make figure
plt.plot([1,2,3,4])
plt.ylabel('some numbers')

#save
strFile = "./figs/my_plot.jpg"
if os.path.isfile(strFile):
   os.remove(strFile)   # Opt.: os.system("rm "+strFile)
plt.savefig(strFile)

Il peut être assez difficile d'utiliser directement "rm" comme ligne de commande système, mais vous pouvez utiliser n'importe quelle autre option similaire à celle-ci.

Mais pour être honnête, il est étrange que matplotlib n'écrase pas le fichier.

MODIFIER

Je vois que vous utilisez Windows, vous pouvez donc utiliser "del" comme ligne de commande de suppression au lieu de "rm" pour unix.

6
iblasi

La réponse de Jon du 02/10/2015 a fait l'affaire pour moi. https://superuser.com/questions/147525/what-is-the-date-column-in-windows-7-Explorer-it-matches-no-date-column-from/335901#335901

Fondamentalement, Windows détecte de nombreuses images dans un dossier et "optimise" ledit dossier pour les images. Cela signifie que la colonne affichée est Date plutôt que Date de modification comme elle le serait pour un dossier "optimisé" pour les documents. La date prend la première de Date de création et de Date de modification. Comme la date de création ne change pas lorsque matplotlib .savefig écrase un fichier, la colonne Date ne change jamais.

Pour résoudre ce problème, j'ai personnalisé le dossier des documents. Pour ce faire, sélectionnez le dossier et ouvrez la fenêtre des propriétés. Accédez à l'onglet Personnaliser, puis sélectionnez les documents sous "Optimiser ce dossier pour".

11
bbade

Ajoutez simplement "plt.close ()"

plt.savefig("./figs/my_plot.jpg")
plt.close()