Esto parece que debe 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 (p. ej., cambio de etiqueta) y luego vuelvo a ejecutar, el gráfico 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 eliminó una actualización del sistema, por lo que parece ser un posible culpable. ¿Alguna idea para solucionar este problema, además de crear un nuevo nombre de archivo cada vez que se realiza un cambio?
TLDR: Las fotos se estaban sobrescribiendo, pero la fecha se mantuvo igual que el archivo original, debido a una peculiaridad de las ventanas cuando una carpeta tiene muchas fotos.
La respuesta de Jon del 2/10/2015 me funcionó. https://superuser.com/questions/147525/cuál-es-la-columna-de-fecha-en-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 las 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. La fecha toma la fecha anterior de la fecha de creación y la 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. Navegue a la pestaña de personalización y luego seleccione los documentos en "optimizar esta carpeta para".
Puede ser simple y estúpido, pero solo 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 siendo honesto, es extraño que matplotlib no sobrescriba el archivo.
EDITAR
Veo que está usando Windows, por lo que puede usar "del" como línea de comando de eliminación en lugar de "rm" para Unix.
Simplemente agregue "plt.close ()"
plt.savefig("./figs/my_plot.jpg") plt.close()