【问题标题】:Matplotlib savefig() over multiple graphs keeps saving the same graphMatplotlib savefig() 在多个图上不断保存同一张图
【发布时间】:2018-03-07 04:17:24
【问题描述】:

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

【问题讨论】:

  • return 来自generategraph 的数字并使用fig.savefig(path):for fil in files: fig = generategraph(fil); fig.savefig(fil.split('.txt')[0])

标签: python matplotlib graph


【解决方案1】:

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

明确地创建你的人物:

fig1, ax1 = pyplot.subplots()

直接对它们采取行动:

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

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

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

【讨论】:

  • 对我来说,这是正确的解决方案,因为保存图像后写 plt.show 如果你有几十张图像就没用了
【解决方案2】:

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

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

【讨论】:

  • 在我编写的代码中,每个图形每次都以不同的名称保存。例如,如果我有 3 个名为“a.txt,b.txt,c.txt”的文件,我的代码将遍历每个文件,根据其数据生成一个图表,然后将其保存为“a.png,b.png , c.png”。这部分代码在我最终得到那些 .png 文件时起作用。问题是这些 .png 文件中的每一个都具有相同的图形。但是 plt.show() 显示的图形是正确的图形。我只是感到困惑,因为我在代码中的同一点保存并显示它们。它应该是相同的,但它不是。
  • 好的,很高兴知道 - 我编辑了我的答案,建议将 plt.show() 放在 plt.savefig() 之后
  • 完美,将 .show() 放在 .savefig() 之后解决了问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
相关资源
最近更新 更多