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

2024-05-01 21:51:11 发布

您现在位置:Python中文网/ 问答频道 /正文

Matplotlib提供以下功能:

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

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


Tags: 函数文档功能信息closematplotlibwindowfigure
3条回答

我今天发现了一个警告。 如果有一个函数多次调用plot,那么最好使用plt.close(fig),而不是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())

如果记忆是一个问题,有人已经发布了一个工作,所以请看: Create a figure that is reference counted

plt.cla()表示清除电流轴

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

还有plt.gca()(获取当前轴)和plt.gcf()(获取当前图)

请在此处阅读更多信息:Matplotlib, Pyplot, Pylab etc: What's the difference between these and when to use each?

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

pyplot接口

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

^{} clears an axes,即当前图形中当前活动的轴。它使其他轴保持不变。

^{} clears the entire current figure及其所有轴,但使窗口保持打开状态,以便它可以用于其他绘图。

^{} closes a window,如果没有另外指定,它将是当前窗口。

哪些功能最适合您,这取决于您的用例。

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

Figure类的方法

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

^{} clears the entire figure。只有当fig是当前数字时,此调用才等价于plt.clf()

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

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

相关问题 更多 >