1

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()、よりオブジェクト指向のスタイルのaはありますか?

私のバージョンのソースコード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したがって、これは、私が完全には従わないさまざまなことを実行するstaticmethodに基づいているように見えます 。インタラクティブなバックエンドでは、これはウィンドウの「破棄」および「削除」イベントにバインドされていることに注意してください。しかし、図とウィンドウがどのように関連しているかはわかりません。

たぶん、これについて考えても時間を無駄にしているのかもしれません。

4

1 に答える 1

2

Gcfで開いた図のリストを保持するグローバルシングルトンオブジェクトですplt.figure

それは本質的に、物事の一貫性を保ち、アクティブな人物を追跡するために、その周りにいくつかの凝ったコードを備えた辞書です。Figure(によって返されるものplt.figure)とGUIレイヤーの間のレイヤーとして使用されるクラスはFigureManagerBase(およびツールキットごとのサブクラス)であり、で定義されていbackend_bases.pyます。

使用しているサブクラスは、使用しているバックエンドによって決まります。これらのサブクラスは、「x」ボタンをクリックしたときにフィギュアが削除されるようにすることや、システムレベルのGUIコールバックなどを処理します。

FigureManagerdestroy内部分解をトリガーするメソッドがあります。原則として、Figureオブジェクトがあり、それを手で破壊したい場合は、マネージャーを手に入れる必要があります。それへの参照はオブジェクトに保存されませんが、Figureオブジェクトに保存されるCanvasため、を介してウィンドウを破棄できます。

fig.canvas.manager.destroy()

これはフィギュアを破壊しますが、これを行うと、適切にクリーンアップされない可能性がありますGcf (フィギュアマネージャーへの参照が保持されます)。これにより、将来のフィギュアにpyplot予期しない番号が付けられます(1に戻りません)。 、gcaectとしては機能しません(これはの場合Qt4です)。

使用する場合pyplot(そして、すべてのバックエンドで常に機能することを確認してください)、次のいずれかを行う必要があります。

  1. 直接話してくださいGcf(それ_pyplot_helpers.pyが何をしようとしているのかを見れば、それは実際にはそれほど複雑ではありません
  2. GUIに直接アクセスして対話します(を使用するlib/matplotlib/tests/test_backend_qt4.py方法については、のコードを参照してくださいqt4。ただし、これはツールキットに大きく依存します)
  3. plt.close(fig.number)
于 2013-02-13T21:53:16.513 に答える