请注意,即使 del fig 也不会关闭关联的图形窗口 . 据我所知,关闭图形窗口的唯一方法是使用 plt.close(fig) ,如上所述 .
58
我今天发现了一个警告 . 如果你有一个多次调用一个绘图的函数你最好使用 plt.close(fig) 而不是 fig.clf() 不知怎的,第一个不会在内存中累积 . 简而言之 if memory is a concern use 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())
3 回答
它们都做不同的事情,因为matplotlib使用层次结构顺序,其中图形窗口包含可能由许多轴组成的图形 . 此外,pyplot接口还有一些函数,
Figure
类上有方法 . 我将在下面讨论这两种情况 .pyplot界面
pyplot
是一个模块,它收集一些允许matplotlib以功能方式使用的函数 . 我在这里假设pyplot
已导入import matplotlib.pyplot as plt
. 在这种情况下,有三个不同的命令可以删除东西:plt.cla() clears an axes,即当前图中当前活动的轴 . 它使其他轴保持不变 .
plt.clf() clears the entire current figure及其所有轴,但保持窗口打开,以便可以重复用于其他图 .
plt.close() closes a window,如果没有另外指定,它将是当前窗口 .
哪种功能最适合您,因此取决于您的用例 .
close()
函数还允许指定应关闭哪个窗口 . 参数可以是使用figure(number_or_name)
创建窗口时给出的数字或名称,也可以是获得的图形实例fig
,即使用fig = figure()
. 如果没有给close()
赋予参数,则将关闭当前活动的窗口 . 此外,还有语法close('all')
,它会关闭所有数字 .图类的
方法
此外,
Figure
类提供了清除数字的方法 . 我将在下面假设fig
是Figure
的一个实例:fig.clf() clears the entire figure . 仅当
fig
是当前数字时,此调用等同于plt.clf()
.fig.clear()
是fig.clf()
的同义词请注意,即使
del fig
也不会关闭关联的图形窗口 . 据我所知,关闭图形窗口的唯一方法是使用plt.close(fig)
,如上所述 .我今天发现了一个警告 . 如果你有一个多次调用一个绘图的函数你最好使用
plt.close(fig)
而不是fig.clf()
不知怎的,第一个不会在内存中累积 . 简而言之 if memory is a concern use plt.close(fig) (虽然似乎有更好的方法,但请在相关链接的评论结尾处) .因此以下脚本将生成一个空列表:
而这个将产生一个包含五个数字的列表 .
从上面的文档中我不清楚关闭一个数字和关闭一个窗口有什么区别 . 也许这会澄清 .
如果你想尝试一个完整的脚本,你有:
如果记忆是一个问题,有人已经在SO中发布了解决方案,请参阅: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?