Matplotlib savefig()在多个图形上保持保存同一图形

Rez*_*emi 6 python graph matplotlib

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

    plt.show()
    savefile = file.split('.txt')[0] + '.png'
    plt.savefig(savefile)
Run Code Online (Sandbox Code Playgroud)

然后总的来说,我将浏览一组文件,并对每个文件调用generategraph。

    for fil in files:
        generategraph(fil)
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*l H 7

您正在使用状态机(pyplot)界面。别。

显式创建您的图:

fig1, ax1 = pyplot.subplots()
Run Code Online (Sandbox Code Playgroud)

直接对他们采取行动:

lines, = ax1.plot(data1, data2, ...)
Run Code Online (Sandbox Code Playgroud)

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

fig1.savefig(filename, dpi=300)
pyplot.close(fig1)
Run Code Online (Sandbox Code Playgroud)


Reb*_*que 4

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

[编辑]那么你可能应该放在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()
Run Code Online (Sandbox Code Playgroud)

或者,您可以更改签名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)
Run Code Online (Sandbox Code Playgroud)