2016-04-24 15 views
0

海中のヒートマップにモーションイベントを関連付けようとしているため、マウスでマウスをホバーすると境界線が強調表示されます。これまでのところ、私はキャンバスにmotion_notify_eventを関連付けることによって、それを行うために管理:マウスホバーを介して海底ヒートマップのセルをハイライト表示

import matplotlib.patches as mpatches 

self.canvash.mpl_connect('motion_notify_event', self.onMotion) 

(...) 

def onMotion(self,event): 
    if not event.inaxes: 
     return 

    xint = int(event.xdata) 
    yint = int(event.ydata) 

    self.axh.add_patch(mpatches.Rectangle((xint, yint),1,1,fill=False,edgecolor='blue',linewidth=0.5)) 

    self.canvash.draw() 

これは動作しますが、私はマウスを移動として、セルが強調されます。一方だけがアクティブになるように

enter image description here

私はちょうど、私はそれを移動すると、マウスの下のセルを強調表示したい:問題は、すべてのセルがハイライト表示されます、そして、結果はこのようなものであるということです。

どうすればいいですか?

+0

おそらく、あなたのイベントがトリガされるたびに既存のハイライトをクリアする必要があります。だから、あなたは 'onMotion'の最上部にあるコードを置くことになります –

+0

はい、それは私が考えていたもの、おそらく' remove_patch'のようなものでしたが、パッチを削除することに関連する文書では何も見つかりませんでした単に追加するだけです。もし私が 'cla()'や 'clf()'メソッドを使うと図全体がリセットされます... – MrPedru22

+2

私は実際に最小限で完全な作業例を手伝ってくれません。パッチオブジェクトをクラスのプロパティとして保存して削除したのでしょうか? –

答えて

0

私は解決策を見つけることができました、ポール・H.のおかげで、私はちょうどパッチを保存し、それを削除する必要がありましたし、それが正常に動作し、ここでの解決策は次のとおりです。

def onMotion(self,event): 

    if not event.inaxes: 
     return 

    xint = int(event.xdata) 
    yint = int(event.ydata) 

    self.rect = mpatches.Rectangle((xint, yint),1,1,fill=False,linestyle='dashed', edgecolor='red',linewidth=2.0) 

    self.axh.add_patch(self.rect) 

    self.canvash.draw() 

    self.rect.remove() 
関連する問題