多个图上的Matplotlib savefig()保存相同的图

tpxzln5u  于 2023-08-06  发布在  其他
关注(0)|答案(3)|浏览(122)

所以我有一个函数generategraph(file),它根据参数中的数据正确地创建一个条形图,然后保存它。这是保存它的部分。

plt.show()
    savefile = file.split('.txt')[0] + '.png'
    plt.savefig(savefile)

字符串
然后在main中,我将遍历一组文件,并对每个文件调用generategraph。

for fil in files:
        generategraph(fil)


plt.show()给了我正确的图形(每次不同的图形),但是当我去保存的图形时,它们都是相同的图形(所以len(files)保存的图形的数量,但是每个都是第一个文件的图形,如果有意义的话)。我只是感到困惑,因为plt.show()正在做我希望plt.savefig做的事情。

jgovgodb

jgovgodb1#

您正在使用状态机(pyplot)接口。别说了
明确创建图形:

fig1, ax1 = pyplot.subplots()

字符串
直接作用于它们:

lines, = ax1.plot(data1, data2, ...)


然后分别保存并关闭它们:

fig1.savefig(filename, dpi=300)
pyplot.close(fig1)

0aydgbwb

0aydgbwb2#

您可能需要验证所保存地物的名称是否与每个地物的名称不同。(以下是伪代码,不清楚你是如何得到文件名的。)

**[edit]**那么你可能应该把plt.show()放在plt.savefig(savefile)之后

#initialize idx to 0 earlier, and don't re-initialize it.

idx += 1
savefile = file + str(idx) + '.png'   # file might need to be replaced by a string
plt.savefig(savefile)
plt.show()              # place after plt.savefig()

字符串
或者,更改generategraph的签名

def generategraph(file, idx):
    savefile = file + str(idx) + '.png'  # file might need to be replaced by a string
    plt.savefig(savefile)
    plt.show()              # place after plt.savefig()


for idx, fil in enumerate(files):
    generategraph(fil, idx)

gwbalxhn

gwbalxhn3#

我也有同样的问题。我没有在绘制完图形后立即使用plt.savefig('figure name.png'),而是使用了savefile.savefig('figure name.png')。这就解决了

相关问题