Matplotlib 提供以下功能:
cla() # Clear axis
clf() # Clear figure
close() # Close a figure window
该文档没有提供很多关于这些功能之间的区别的见解。我应该什么时候使用每个功能,它到底是做什么的?
Matplotlib 提供以下功能:
cla() # Clear axis
clf() # Clear figure
close() # Close a figure window
该文档没有提供很多关于这些功能之间的区别的见解。我应该什么时候使用每个功能,它到底是做什么的?
它们都做不同的事情,因为 matplotlib 使用分层顺序,其中图形窗口包含一个可能由许多轴组成的图形。此外,还有来自 pyplot 接口的函数和Figure类中的方法。我将在下面讨论这两种情况。
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是 a 的一个实例Figure:
fig.clf()清除整个数字。此调用等效于plt.clf()only if figis the current figure。
fig.clear()是同义词fig.clf()
请注意,甚至del fig不会关闭关联的图形窗口。据我所知,关闭图形窗口的唯一方法是plt.close(fig)如上所述使用。
我今天发现了一个警告。如果您有一个函数多次调用绘图,则最好使用第一个函数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 中发布了一个解决方法,请参阅: 创建一个引用计数的图形
plt.cla()表示清除当前轴
plt.clf()表示清除当前数字
此外,还有plt.gca()(获取当前轴)和plt.gcf()(获取当前图)