Matplotlib 提供以下功能:
cla() # Clear axis
clf() # Clear figure
close() # Close a figure window
我应该在什么时候使用每个函数,它们究竟有什么作用?
原文由 southoz 发布,翻译遵循 CC BY-SA 4.0 许可协议
Matplotlib 提供以下功能:
cla() # Clear axis
clf() # Clear figure
close() # Close a figure window
我应该在什么时候使用每个函数,它们究竟有什么作用?
原文由 southoz 发布,翻译遵循 CC BY-SA 4.0 许可协议
我今天发现了一个警告。如果你有一个多次调用绘图的函数,你最好使用 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 中发布了一个变通方法,请参阅: 创建一个引用计数的图形
原文由 Heberto Mayorquin 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答852 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
它们都做不同的事情,因为 matplotlib 使用层次顺序,其中图形窗口包含可能由许多轴组成的图形。此外,还有来自 pyplot 接口的函数,以及
Figure
类中的方法。我将在下面讨论这两种情况。pyplot界面
pyplot
是一个模块,它收集了几个允许以功能方式使用 matplotlib 的函数。我在这里假设pyplot
已导入为import matplotlib.pyplot as plt
。在这种情况下,可以使用三种不同的命令来删除内容:见
matplotlib.pyplot
功能:plt.cla()
清除一个轴,即当前图形中的当前活动轴。它使其他轴保持不变。plt.clf()
清除整个当前图形及其所有轴,但保持窗口打开,以便它可以重新用于其他绘图。plt.close()
关闭一个窗口,如果没有另外指定,这将是当前窗口。因此,哪些功能最适合您取决于您的用例。
close()
函数还允许指定应关闭哪个窗口。参数可以是使用figure(number_or_name)
创建窗口时赋予的数字或名称,也可以是图形实例fig
获得,即使用fig = figure()
。如果没有给close()
参数,当前活动的窗口将被关闭。此外,还有语法close('all')
,它关闭所有图形。Figure 类的方法
此外,
Figure
类提供了清除图形的方法。我将在下面假设fig
是Figure
的一个实例:fig.clf()
清除整个图形。此调用等效于plt.clf()
仅当fig
是当前图形时。fig.clear()
是—的同义词fig.clf()
请注意,即使
del fig
也不会关闭相关的图形窗口。据我所知,关闭图形窗口的唯一方法是使用plt.close(fig)
如上所述。