欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-19 15:09:23
...

Matplotlib提供以下功能:

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

该文档没有提供很多关于这些功能之间的区别的见解。 什么时候应该使用每个函数,它的作用是什么?


#1楼

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


#2楼

plt.cla()表示清除当前轴

plt.clf()表示清除当前数字

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

在此处阅读更多信息: Matplotlib,Pyplot,Pylab等:这些以及何时使用它们有什么区别?


#3楼

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

pyplot界面

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

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

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

plt.close()关闭一个 window,如果没有另外指定,它将是当前窗口。

因此,哪种功能最适合您取决于您​​的用例。

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

Figure类的方法

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

fig.clf()清除整个图 。 仅当fig是当前图形时,此调用才等效于plt.clf()

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

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

相关标签: matplotlib plot