Python 多个图形上的Matplotlib savefig()会保存同一个图形

Python 多个图形上的Matplotlib savefig()会保存同一个图形,python,matplotlib,graph,Python,Matplotlib,Graph,因此,我有一个函数generategraph(file),它根据参数中的数据正确创建条形图,然后保存它。这是保存它的部分 plt.show() savefile = file.split('.txt')[0] + '.png' plt.savefig(savefile) 然后在主要部分,我将浏览一组文件,并对每个文件调用generategraph for fil in files: generategraph(fil) plt.show()为我

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

    plt.show()
    savefile = file.split('.txt')[0] + '.png'
    plt.savefig(savefile)
然后在主要部分,我将浏览一组文件,并对每个文件调用generategraph

    for fil in files:
        generategraph(fil)

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

您可能需要验证保存的地物的名称是否不同。(以下是伪代码,不清楚如何获取文件名。)

[编辑]那么您可能应该将
plt.show()
放在
plt.savefig(savefile)

或者,您可以更改
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)

您正在使用状态机(pyplot)接口。不要

明确创建您的数字:

fig1, ax1 = pyplot.subplots()
直接对其采取行动:

lines, = ax1.plot(data1, data2, ...)
然后分别保存和关闭它们:

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

在我编写的代码中,每次使用不同的名称保存每个图形。例如,如果我有3个名为“a.txt,b.txt,c.txt”的文件,我的代码将遍历每个文件,根据其数据生成一个图形,然后将其保存为“a.png,b.png,c.png”。这部分代码在我处理这些.png文件时起作用。问题是这些.png文件中的每一个都是同一个图形。但是plt.show()显示的图形是正确的图形。我只是感到困惑,因为我在代码的同一点保存并显示它们。应该是一样的,但不是。好的,很高兴知道-我编辑了我的答案,建议将
plt.show()
放在
plt.savefig()之后。
Perfect,将.show()放在.savefig()之后修复了问题。谢谢
返回
generategraph
中的图形,并使用
fig.savefig(路径)
用于fil-in-files:fig=generategraph(fil);fig.savefig(fil.split('.txt')[0])
对于我来说,这是正确的解决方案,因为如果有几十个图像,在保存图像后编写plt.show是没有用的
fig1.savefig(filename, dpi=300)
pyplot.close(fig1)