3

私は、wxPython パネルに格納された matplotlib を使用して、負荷の高いプロットを行っています。私の問題は、ネイティブのパン ツールを使用するときに発生します。パン ハンドルをドラッグすると、matplotlib が常にキャンバスを再描画しようとしているように見えます。私がプロットしているデータの量では、これは本当に途切れ途切れになっています(データのコレクションなどですでに最適化されています)

パフォーマンスの観点からは、パンの最後でマウスが離されたときにキャンバスが一度だけ描画される方がはるかに望ましいと思います。これは、WxAgg NavigationToolbar2 クラスを独自に拡張する必要があることを意味しますが、誰かがこれと同様のことを試みて、どの関数をオーバーライドするかについてアドバイスできるかどうか疑問に思っていますか?

どうもありがとう

4

1 に答える 1

3

私は多くの時間をかけて matplotlib バックエンドの変更を行ってきましたが、この特定の変更を行ったことはありませんが、動的更新を停止するコメント アウトする 1 行のコードを示すことができます。

バックエンドを使用していると思われますWxAgg。その場合は、次のファイルを開きます。C:\Python27\Lib\site-packages\matplotlib\backends\backend_wx.py

ここに示されている行をコメントアウトします。

def dynamic_update(self):
    d = self._idle
    self._idle = False
    if d:
        #self.canvas.draw() #<--- Comment out to stop the redrawing during the Pan/Zoom
        self._idle = True

私はこれをテストしましたが、問題をうまく解決しているようです。私はいくつかの簡単な掘り下げを行いましたが、このプロシージャを呼び出す他の関数は見られなかったので、次のように変更することさえできるかもしれません:

def dynamic_update(self):
    pass

...これは、基本NavigationToolbar2クラスにあるのと同じコードです

(もちろん、この変更に満足している場合は、この種の変更を加えて独自のカスタム バックエンドを作成するためにもう少し作業を行うことができます。matplotlib をアップグレードするときに変更が失われないようにするためです)

于 2012-12-05T18:25:11.113 に答える