如何关闭Seaborn绘图

8

我正在使用Seaborn、Pandas和Python运行一个循环来提取数据和绘制图形。我只想将每个图形保存为图形文件并关闭它们,但是我无法弄清楚如何实现。

/usr/local/lib/python3.6/dist-packages/seaborn/axisgrid.py:311: RuntimeWarning: 已打开20多个图形。通过pyplot接口(matplotlib.pyplot.figure)创建的图形会一直保留,直到显式关闭,并可能消耗大量内存。(要控制此警告,请参见rcParam figure.max_open_warning)。

我本以为g.close()可以解决问题,但我得到了错误消息:AttributeError: 'FacetGrid' 对象没有 'close' 属性

    for o in options:
        s = "SELECT * from options_yahoo where contract_name = '" + o + "'
        SQL_Query = pd.read_sql_query(s, conn)
        df = pd.DataFrame(SQL_Query)
        g = sns.relplot( kind="line", data=df[['bid','ask','lastprice']])
        g.savefig( o+ ".png")
        g.close()

我希望能够有一种更高效的解决方案,不会占用太多内存并产生警告错误。非常感谢您提供一些最佳实践。


1
你需要访问图形本身来关闭:g.fig.close() - busybear
@busybear 执行 g.fig.close() 会导致 AttributeError: 'Figure' object has no attribute 'close'。请改为使用 plt.close(g.fig),详见我的下方回答。 - Johan
2个回答

6

Seaborn图形响应pyplot命令,您可以执行plt.close()来关闭当前图形,即使它是由Seaborn绘制的。


2
请注意,它是plt.close()(matplotlib.pyplot),而不是sns.close()sns_plot.close()(seaborn)。 - mirekphd

2
如果您想关闭与seaborn图(例如FacetGrid)对应的特定图形,命名为sns_plot,请使用以下命令:
plt.close(sns_plot.fig)

我按照以下方式操作。plt.close(g.fig) - dialektike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接