Matplotlib savefig() 在多个图表上不断保存相同的图表

问题描述 投票:0回答:4

所以我有一个函数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 做的事情。

python matplotlib graph
4个回答
21
投票

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

明确创建您的图形:

fig1, ax1 = pyplot.subplots()

直接对它们采取行动:

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

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

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

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()

或者,您可以更改

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)

0
投票

您只需在拨打

plt.close()
后拨打
plt.savefig(...)
即可。

这是最直接的解决方案,不会显示您必须关闭的 Matplotlib 窗口。


-1
投票

我也遇到了完全相同的问题。我没有在绘制图形后立即使用

plt.savefig('figure name.png')
,而是使用
savefile.savefig('figure name.png')
。这解决了它。

© www.soinside.com 2019 - 2024. All rights reserved.