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

Matplotlib提供那里的function:

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

这些文档并没有提供很多关于这些function之间的区别的信息。 什么时候应该使用每个function?它究竟做了什么?

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

pyplot接口

pyplot是一个模块,它收集了一些允许matplotlib以function方式使用的函数。 我在这里假设pyplot已被导入为import matplotlib.pyplot as plt 。 在这种情况下,有三个不同的命令可以删除东西:

plt.cla()清除一个轴 ,即当前活动轴。 它保持其他轴不变。

plt.clf()清除整个当前graphics的所有坐标轴,但会将窗口打开,以便可以重新用于其他graphics。

如果没有指定, plt.close()closures一个窗口 ,它将成为当前窗口。

哪个function最适合你,这取决于你的使用情况。

close()函数还允许指定哪个窗口应该closures。 参数可以是使用figure(number_or_name)创build的窗口的数字或名称,也可以是graphics实例,即fig = figure() 。 如果close()没有参数,则当前活动的窗口将被closures。 此外,还有语法close('all') ,它closures所有数字。

图类的方法

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

fig.clf()清除整个graphics 。 这个调用相当于plt.clf()只有当fig是当前的数字。

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

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

我今天发现的只是一个警告。 如果你有一个函数调用一个剧情很多次,你最好使用plt.close(fig)而不是fig.clf() ,第一个不会在内存中累积。 总之, 如果内存是一个问题,请使用plt.close(fig) (虽然看起来有更好的方法,但是到相关链接的这个评论的末尾)。

所以下面的脚本会产生一个空的列表:

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

从上面的文档我不清楚什么是closures一个数字和closures一个窗口之间的区别。 也许这将澄清。

如果你想尝试一个完整的脚本,你有:

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

如果内存是一个问题,有人已经在这里发布了一个解决方法看: 创build一个参考数字