通过Matplotlib中的OO接口获取图形管理器

时间:2012-10-25 09:39:53

标签: matplotlib figure

我希望能够获得已创建数字的figure_manager: 例如我可以使用:

使用pyplot接口
from pylab import*
figure()    
plot(arange(100))
mngr = get_current_fig_manager()

然而,如果我有一些数字怎么办:

from pylab import *
fig0 = figure()
fig1 = figure()    
plot(arange(100))
mngr = fig0.get_manager() #DOES NOT WORK - no such method as Figure.get_manager()

然而,仔细搜索图API http://matplotlib.org/api/figure_api.html,没有用。在我的IDE中,在一个数字实例上都没有自动完成,没有一个方法/成员似乎给我一个“经理”。

那么我该怎么做呢?一般来说,如果在OO界面中有一个我需要模拟的pyplot方法,我应该在哪里查看?

PS:get_current_fig_manager()返回了什么样的对象? 在调试器中我得到:

type(get_current_fig_manager())
<type 'instance'>

听起来很神秘......

1 个答案:

答案 0 :(得分:4)

好问题。你的权利,文档没有说任何关于能够获得经理或画布的事情。根据代码的经验,您的问题的答案是:

>>> import matplotlib.pyplot as plt
>>> a = plt.figure()
>>> b = plt.figure()

>>> a.canvas.manager
<matplotlib.backends.backend_tkagg.FigureManagerTkAgg instance at 0x1c3e170>
>>> b.canvas.manager
<matplotlib.backends.backend_tkagg.FigureManagerTkAgg instance at 0x1c42ef0>

了解这些内容的最佳位置是阅读代码。在这种情况下,我知道我想获得画布,以便我可以抓住图形管理器,所以我查看了figure.py中的set_canvas方法,并找到了以下代码:

def set_canvas(self, canvas):
    """
    Set the canvas the contains the figure

    ACCEPTS: a FigureCanvas instance
    """
    self.canvas = canvas

从那里开始,(因为没有get_canvas方法),我知道画布的存储位置,可以直接访问它。

HTH