【问题标题】:savefig loop adds previous plots to figuresavefig 循环将以前的图添加到图
【发布时间】:2016-10-10 14:40:19
【问题描述】:

我正在尝试使用 forloop 为我拥有的每组数据生成数字,但是当 .show() 命令生成正确的数字时, .savefig() 不断将先前绘制的值添加到新数字中。 在我的forloop中,这是相关的代码示例。

import matplotlib.pyplot as plt
plt.plot(X,Y[:,0],'o-')
plt.xlabel('x')
plt.savefig('plot'+str(i)+'.png')

作为比较,这里是savefig plot,这里是show()。可以看出,savefig() 图还绘制了之前的结果。

【问题讨论】:

    标签: python for-loop matplotlib plot


    【解决方案1】:

    使用函数保存后必须关闭当前图形 plt.close():http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.close

    或者你必须在plt.clf()保存后清理当前图形:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.clf

    【讨论】:

    • plt.clf() 为我解决了问题!我疯了一个多小时,你的回答救了我。
    • 这也适用于您在尝试使用for 循环保存绘图时获得空白图像。谢谢!
    • plt.clf() 清除了前一个图但保留了 figsize,在我的情况下,我使用 plt.close() 因为我正在绘制两个具有不同 fig 大小的不同图。
    【解决方案2】:

    在添加plt.clf() 之前,我制作了一些漂亮的图表,以在每次循环中清除情节。 scatterplot1 scatterplot2

    换句话说,我之前的图被添加到一个单独的图中,如上图所示,也在我的 for 循环中。添加 [plt.clf()] 以每次通过循环清除绘图修复了此问题,即在顶部开始循环迭代之前清除图形以创建具有新绘图的新图形。

    TLDR;我在每次循环中都包含plt.clf() 以清除情节。

    【讨论】:

    • 目前还不清楚这是否与 OP 的具体问题有关;请添加详细信息以显示您如何 (1) 重现问题,然后 (2) 使用您的解决方案修复它;细节应该是这样的,其他人可以自己实施您的解决方案,以验证它确实有效;谢谢
    • 在每个绘图完成后调用 plt.clf() 并保存在 for 循环中。效果很好。开枪!
    猜你喜欢
    • 2016-02-23
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多