何时使用cla()、clf()或close()清除matplotlib中的绘图?

何时使用cla()、clf()或close()清除matplotlib中的绘图?,matplotlib,plot,Matplotlib,Plot,Matplotlib提供以下功能: cla() # Clear axis clf() # Clear figure close() # Close a figure window 文档没有提供很多关于这些函数之间的区别的见解。我应该在什么时候使用每个函数以及它具体做什么?它们都做不同的事情,因为matplotlib使用层次顺序,其中图形窗口包含可能由多个轴组成的图形。此外,pyplot接口中还有函数和Figure类中的方法。我将在下面讨论这两种情况 pyplot接口 pyplot是一个

Matplotlib提供以下功能:

cla()   # Clear axis
clf()   # Clear figure
close() # Close a figure window

文档没有提供很多关于这些函数之间的区别的见解。我应该在什么时候使用每个函数以及它具体做什么?

它们都做不同的事情,因为matplotlib使用层次顺序,其中图形窗口包含可能由多个轴组成的图形。此外,pyplot接口中还有函数和
Figure
类中的方法。我将在下面讨论这两种情况

pyplot接口
pyplot
是一个模块,它收集了两个函数,使matplotlib能够以功能性的方式使用。这里我假设
pyplot
已作为
import matplotlib.pyplot作为plt
导入。 在本例中,有三个不同的命令用于删除内容:

,即当前图形中当前活动的轴。其他轴保持不变

所有轴,但保持窗口打开,以便可以将其重新用于其他打印

,如果未另行指定,则将是当前窗口

因此,哪些函数最适合您取决于您的用例

close()
函数还允许用户指定应关闭的窗口。参数可以是使用
figure(number\u或\u name)
创建窗口时提供给窗口的数字或名称,也可以是获得的图形实例
fig
,即使用
fig=figure()
。如果未为
close()
提供任何参数,则当前活动的窗口将关闭。此外,还有语法
close('all')
,用于关闭所有图形

Figure类的方法 另外,
Figure
类提供了清除图形的方法。 我将在下面假设
的一个实例:

。只有当
fig
是当前图形时,此调用才等效于
plt.clf()

fig.clear()
fig.clf()的同义词


请注意,即使
del fig
也不会关闭相关的地物窗口。据我所知,关闭图形窗口的唯一方法是使用如上所述的
plt.close(fig)

我今天发现了一个警告。 如果有一个函数多次调用绘图,最好使用
plt.close(图)
而不是
fig.clf()
,因为第一个函数不会在内存中累积。简而言之,如果内存是一个问题,请使用plt.close(图)(尽管似乎有更好的方法,但请转到本评论的末尾以获取相关链接)

因此,以下脚本将生成一个空列表:

for i in range(5):
    fig = plot_figure()
    plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())
而这一个将产生一个列表,上面有五个数字

for i in range(5):
    fig = plot_figure()
    fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())
从上面的文档中,我不清楚关闭图形和关闭窗口之间的区别。也许这会澄清问题

如果您想尝试完整的脚本,您有:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = np.sin(x)

for i in range(5):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(x, y)
    plt.close(fig)

print(plt.get_fignums())

for i in range(5):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(x, y)
    fig.clf()

print(plt.get_fignums())
如果内存是一个问题,有人已经在中发布了一个解决方案,请参见: plt.cla()表示清除电流轴

plt.clf()表示清除当前图形

另外,还有plt.gca()(获取当前轴)和plt.gcf()(获取当前图形)


阅读更多信息:

因为
close()
是一个非特定命令,所以我一直在寻找一种方法来指定图闭包(
fig.close()
不是一个函数)。正确的语法是:
plt.close(fig)
。关于
clear()
,我没有看到与
cla()
有多大区别,只是在寄生虫轴中,只有
cla()
被特别处理。在我的
matplotlib.pyplot
(MacOS上的1.4.2版)中没有
clear()
函数。您能告诉我相关的文档吗?Figure和Axis类都有一个
clear()
方法。相当于
clf
,相当于
cla
。这对jupyter有效吗?我不断地碰到内存错误,因为当我在jupyter中重新运行一个单元格时,数字并没有被垃圾收集。感谢对引用计数问题的有用交叉引用。这正是Matplotlib应该已经工作的方式。同样可怕和令人震惊的是,在标准的
pyplot
API下,图形从未被垃圾收集。然而,我发现,如果必须制作动画(例如一些2D等高线/pcolormesh贴图),最好清除图形并绘制新字段,而不是关闭旧的并制作新的图形面板。速度将完全不同。