2011-11-22 21 views
6

私は対話モードでmatplotlibを使用しており、計算を実行しています。たとえば、デバッグの目的で各ステップで中間結果をプロットするステップが多い最適化です。これらのプロットは、多くの場合、画面を満たし重複します。マウスフォーカスで更新するmatplotlibプロットを取得する

私の問題は、計算中に、部分的または完全に遮蔽された図形をクリックしたときに更新されないということです。それらはただの白い灰色です。

図をクリックしたときに必要に応じて強制的に再描画を行いたい場合は、それを表示すると便利ではありません。現在、私はpdb.set_trace()をコードに挿入して、何が起こっているのかを知るためにすべての図を停止してクリックすることができます。

マウスフォーカスを得るたびにmatplotlibに図を再描画させる方法はありますかまたは何か他のことをしている間もサイズが変更されていますか?

答えて

0

Figureをプロットした後、図figplt.show()にプロットする前にplt.figure(fig.number)に電話してみましたか?すべての数字を更新する必要があります。このような

+0

: - フィギュア・キャンバス

  • LocationEventをリサイズされた - マウスは、より多くのアウト新しいフィギュア
  • チェックhereに入ります。またResizeEventが

    • のように扱う他のイベントを試すことができ

      、私はplt.show()を使って試していません。その使用に関する文書(http://matplotlib.sourceforge.net/faq/howto_faq.html#use-show)を見ると、望む効果があるようには見えません。 – Paul

    +0

    @Paul plt.ion()がある場合、show()は暗黙的にdraw()を呼び出す必要があります。最初にplt.figure(fig.number)を実行してください。自動的に更新されるようにしてください。 –

    1

    何かがあなたのために働くかもしれない:

    import matplotlib.pyplot as plt 
    import numpy as np 
    
    plt.ion() # or leave this out and run with ipython --pylab 
    
    # draw sample data 
    fig = plt.figure() 
    ax = fig.add_subplot(111) 
    line, = ax.plot(np.random.rand(10)) 
    
    class Refresher: 
        # look for mouse clicks 
        def __init__(self, fig): 
         self.canvas = fig.canvas 
         self.cid = fig.canvas.mpl_connect('button_press_event', self.onclick) 
    
        # when there is a mouse click, redraw the graph 
        def onclick(self, event): 
         self.canvas.draw() 
    
    # remove sample data from graph and plot new data. Graph will still display original trace 
    line.remove() 
    ax.plot([1,10],[1,10]) 
    
    # connect the figure of interest to the event handler 
    refresher = Refresher(fig) 
    plt.show() 
    

    これは、グラフをクリックしたときにフィギュアを再描画します。ノー

    関連する問題