plt.savefig不会覆盖现有文件

时间:2020-11-11 15:10:34

标签: python matplotlib seaborn xlsxwriter

我有一个循环,循环运行一组“程序”名称,创建一个绘图并将其放置在带有xlsxwriter的工作表中,为此,它将该绘图暂时保存为“ chart.png” '

plt.savefig('chart{}.png'.format(program))
plt.close()
ws.insert_image(r,2,'chart{}.png'.format(program),{'x_scale': 0.5, 'y_scale': 0.5})

这很好用,但是它为每个程序创建了一个单独的文件,其中我有五十多个。我想简单地创建一个'chart.png'文件,放置它,并覆盖下一张图表的文件,等等。但是,这段代码:

plt.savefig('chart.png')
plt.close()
ws.insert_image(r,2,'chart.png',{'x_scale': 0.5, 'y_scale': 0.5})

在每张纸上放置相同的图表。即使以前的代码表明matplotlib正在为每个程序创建一个新图表,但看起来每次新的保存都不会覆盖chart.png。感谢您的协助。

1 个答案:

答案 0 :(得分:2)

worksheet.insert_image()不会将图像直接存储到XLSX文件中(Python source)。相反,它仅在列表中记录诸如单元格,图像文件名,偏移量,比例等信息。

只有在workbook.close()上,XLSX和随附的映像才会存储到磁盘。因此,您应该只在文件中看到该图像的最新版本。

最简单的方法是,在写入XLSX之前需要多个临时图像文件。您可以将它们存储在一个临时目录中,跟踪文件名并在将工作簿写入磁盘后删除这些文件。