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

vx6bjr1n  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(133)

Matplotlib提供了以下功能:

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

我应该在什么时候使用每个函数,它到底是做什么的?

jrcvhitl

jrcvhitl1#

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

pyplot接口

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

*plt.cla()清除轴,i.即当前图中的当前活动轴。其他的轴都不会动。
*plt.clf()清除整个当前图形及其所有轴,但使窗口保持打开状态,以便可以将其重新用于其他图形。
*plt.close()关闭一个窗口,如果没有指定,则为当前窗口。

因此,哪个函数最适合您,取决于您的用例。
close()函数还允许指定应该关闭哪个窗口。该参数可以是一个数字或名称给一个窗口时,它是创建使用figure(number_or_name)或它可以是一个图示例fig获得,即。即,使用fig = figure()。如果没有给close()参数,当前活动的窗口将被关闭。此外,存在语法close('all'),其关闭所有图。

Figure类的方法

此外,Figure类提供了清除图形的方法。下面我假设figFigure的一个示例:
fig.clf()清除整个图形。仅当fig是当前图形时,此调用才等效于plt.clf()
fig.clear()fig.clf()的同义词
请注意,即使del fig也不会关闭关联的图形窗口。据我所知,关闭图形窗口的唯一方法是如上所述使用plt.close(fig)

tgabmvqs

tgabmvqs2#

我今天发现了一个警告。如果你有一个函数调用了很多次绘图,你最好使用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中发布了一个解决方法,请参阅:创建引用计数的地物

ndasle7k

ndasle7k3#

**plt.cla()**表示 * 清除电流轴 *
**plt.clf()**表示 * 清除当前数字 *

还有plt。gca()(得到当前轴)和plt.gcf()(获取当前图形)
阅读更多:Matplotlib, Pyplot, Pylab etc: What's the difference between these and when to use each?

相关问题