Matplotlib Savefig 不会覆盖旧文件

Matplotlib Savefig will NOT overwrite old files

这似乎是我机器上的权限问题。 Windows 10 系统更新后,当我 运行:

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

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

它会在代码为运行的第一次创建图形。如果我更改代码(例如更改标签)然后重新 运行,Jupyter Notebook 中显示的绘图会更新,但保存在我机器上的文件不会!这是今天的一个新问题,在推出系统更新后,所以这似乎是一个可能的罪魁祸首。除了每次进行更改时创建一个新文件名之外,我有什么解决这个问题的见解吗?

这可能简单而愚蠢,但我会做以下事情:

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)

直接使用"rm"作为系统命令行可能会很困难,但您可以使用任何其他类似的选项。

但老实说,matplotlib 没有覆盖文件很奇怪。

编辑

我看到您正在使用 windows,因此您可以使用 "del" 作为删除命令行,而不是 unix 的 "rm"。

TLDR:照片正在被覆盖,但日期与原始文件保持相同,这是由于当文件夹中有很多照片时 windows 的怪癖。

乔恩 2015 年 10 月 2 日的回答对我有用。 https://superuser.com/questions/147525/what-is-the-date-column-in-windows-7-explorer-it-matches-no-date-column-from/335901#335901

基本上 windows 会检测文件夹中的大量图片,并针对图片“优化”所述文件夹。这意味着显示的列是日期而不是修改日期,因为它是针对文档“优化”的文件夹。日期采用创建日期和修改日期中较早的一个。当 matplotlib .savefig 覆盖文件时,创建日期不会改变,因此日期列永远不会改变。

为了解决这个问题,我自定义了文档文件夹。为此 select 文件夹并打开属性 window。导航到自定义选项卡,然后 select 文档下的“优化此文件夹”。

只需添加"plt.close()"

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