7

作成した図の 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()

ただし、Figure API http://matplotlib.org/api/figure_api.htmlを注意深く検索しても役に立ちませんでした。フィギュアのインスタンスのIDEでもオートコンプリートではなく、どのメソッド/メンバーも「マネージャー」を提供していないようでした。

では、どうすればこれを行うことができますか?一般的に、オブジェクト指向インターフェイスで必要なアナログを持つ pyplot メソッドがある場合、どこを見ればよいでしょうか?

PS: とにかく get_current_fig_manager() によって返されるオブジェクトの種類は何ですか? デバッガーで私は得る:

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

かなり神秘的に聞こえます...

4

1 に答える 1

6

良い質問。そうです、ドキュメントには、マネージャーまたはキャンバスを取得できることについては何も書かれていません。コードの経験から、あなたの質問に対する答えは次のとおりです。

>>> 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 マネージャーを取得できるようにキャンバスを取得する必要があることはわかっていたので、set_canvas メソッドを調べたfigure.pyところ、次のコードが見つかりました。

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

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

そこから (get_canvas メソッドがなかったため)、キャンバスがどこに格納されているかがわかり、直接アクセスできました。

HTH

于 2012-10-25T10:36:03.413 に答える