在Matplotlib中:
matplotlib.pyplot.cla()
写为axes.clear()
,其中axes
是matplotlib.axes.Axes
个对象。matplotlib.pyplot.clf()
写为fig.clear()
,其中fig
是matplotlib.figure.Figure
个对象。然后有matplotlib.pyplot.close()
。这关闭了一个窗口。这个窗口对应任何类吗?是否x.close()
等同于matplotlib.pyplot.close()
,但是更加面向对象的风格?
我的版本matplotlib.pyplot.close()
的源代码如下:
if len(args)==0:
figManager = _pylab_helpers.Gcf.get_active()
if figManager is None: return
else:
_pylab_helpers.Gcf.destroy(figManager.num)
elif len(args)==1:
arg = args[0]
if arg=='all':
_pylab_helpers.Gcf.destroy_all()
elif isinstance(arg, int):
_pylab_helpers.Gcf.destroy(arg)
elif is_string_like(arg):
allLabels = get_figlabels()
if arg in allLabels:
num = get_fignums()[allLabels.index(arg)]
_pylab_helpers.Gcf.destroy(num)
elif isinstance(arg, Figure):
_pylab_helpers.Gcf.destroy_fig(arg)
else:
raise TypeError('Unrecognized argument type %s to close'%type(arg))
else:
raise TypeError('close takes 0 or 1 arguments')
所以,它似乎是基于静态方法
matplotlib._pylab_helpers.Gcf.destroy
执行各种我不太关注的事情,注意到在交互式后端中,这被绑定到窗口“destroy”和“delete”事件。但我不确定数字和窗口是如何相关的。
也许我在浪费时间思考这个问题。
答案 0 :(得分:2)
Gcf
是一个全局单例对象,用于保存您使用plt.figure
打开的数字列表。
它本质上是一个字典,周围有一些奇特的代码,以保持一致性并跟踪活动数字等。用作Figure
(由plt.figure
返回的)和GUI层之间的层的类是FigureManagerBase
(以及它的per-toolkit子类),它被定义在backend_bases.py
。
您使用的是哪个子类取决于您使用的是哪个后端。这些子类处理的事情包括确保在单击“x”按钮时系统被删除,以及系统级gui回调。
FigureManager
有一个destroy
方法触发内部拆除。原则上,如果你有一个Figure
对象并希望手动销毁它,你只需要掌握一个经理。对它的引用不存储在Figure
对象中,而是存储在Canvas
对象中,因此您可以通过
fig.canvas.manager.destroy()
会破坏这个数字,但是如果你这样做,它可能无法正确清理Gcf
(这将保留对图形管理器的引用),这将使用pyplot
制作未来数字有意想不到的数字(它不会回到一个),gca
将不会像被执行的那样工作,等等(Qt4
就是这种情况)。
如果您要使用pyplot
(并确保它始终适用于每个后端),那么您需要
Gcf
对话(它位于_pyplot_helpers.py
,一旦你看到它想要做什么就真的不太复杂lib/matplotlib/tests/test_backend_qt4.py
中的代码,了解如何使用qt4
,但这将取决于工具箱)plt.close(fig.number)