Esto parece ser un problema de permisos en mi máquina. Después de una actualización de sistemas en Windows 10, cuando ejecuto:

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

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

Creará la figura la primera vez que se ejecute el código. Si realizo un cambio en el código (por ejemplo, cambiar la etiqueta) y luego vuelvo a ejecutarlo, el diagrama que se muestra en un Jupyter Notebook se actualiza, pero el archivo guardado en mi máquina no. Este es un problema nuevo a partir de hoy, después de que se lanzó una actualización del sistema, por lo que parece ser un posible culpable. ¿Alguna idea para mí de solucionar este problema, además de crear un nuevo nombre de archivo cada vez que se realiza un cambio?

16
EHB 1 mar. 2018 a las 01:20

3 respuestas

La mejor respuesta

Puede ser simple y estúpido, pero haré lo siguiente:

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)

Puede ser bastante difícil usar directamente "rm" como línea de comando del sistema, pero puede usar cualquier otra opción similar a esa.

Pero, para ser sincero, es extraño que matplotlib no sobrescriba el archivo.

EDITAR

Veo que está utilizando Windows, por lo que puede usar "del" como línea de comando de eliminación en lugar de "rm" para Unix.

6
iblasi 25 jun. 2018 a las 14:20

La respuesta de Jon del 10/2/2015 me sirvió. https://superuser.com/questions/147525/what-is-the-date-column-in-windows-7-explorer-it-matches-no-date-column-from/335901#335901

Básicamente, Windows detecta muchas imágenes en una carpeta y "optimiza" dicha carpeta para imágenes. Esto significa que la columna que se muestra es Fecha en lugar de Fecha de modificación, como lo sería para una carpeta "optimizada" para documentos. Fecha toma la fecha anterior de Fecha de creación y Fecha de modificación. Como la Fecha de creación no cambia cuando matplotlib .savefig sobrescribe un archivo, la columna Fecha nunca cambia.

Para resolver este problema, personalicé la carpeta para documentos. Para hacer esto, seleccione la carpeta y abra la ventana de propiedades. Vaya a la pestaña personalizar y luego seleccione los documentos en "optimizar esta carpeta para"

11
bbade 5 jul. 2018 a las 17:50

Simplemente agregue "plt.close ()"

plt.savefig("./figs/my_plot.jpg")
plt.close()
2
Maestre Sanmiguel Colombia 18 nov. 2019 a las 22:07