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

Matplotlib提供了这些功能:

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

文档没有提供很多关于这些功能之间的区别的深入了解。 我应该什么时候使用每个功能?它究竟做了什么?


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

pyplot接口

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

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

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

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

最适合你的功能取决于你的使用情况。

close()函数还允许指定哪个窗口应该关闭。 该参数可以是它是使用创建时号码或名字给一个窗口figure(number_or_name)或者它可以是一个数字实例fig获得,即,使用fig = figure() 如果没有给close() ,当前活动的窗口将被关闭。 此外,还有语法close('all') ,它关闭所有数字。

图类的方法

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

fig.clf()清除整个图形。 只有当fig是当前数字时,此调用才等同于plt.clf()

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

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


今天我发现了一个警告。 如果你有一个很多次调用plot的函数,你最好使用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())

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

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

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

如果内存是一个问题,有人已经在SO中发布了解决方法,请参阅:创建一个引用计数的数字

链接地址: http://www.djcxy.com/p/67591.html

上一篇: When to use cla(), clf() or close() for clearing a plot in matplotlib?

下一篇: How to put the legend out of matplotlib plot