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()
这似乎是我机器上的权限问题。 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()