2016-12-11 20 views
0

「クリック時」イベントをmatplotlib.pyplotのアノテーションに追加して破棄する方法をお探しです。関連するコード:pyplotのアノテーションにクリックイベントを追加する

import matplotlib.pyplot as plt 
plt.ion() 
plt.plot() 
plt.annotate("Kill me",xy=(0,0)) 

は、今、私たちは、アノテーションを見つける必要があり、一つの方法は、反復処理することです:

plt.gca().texts 

良い方法があるかもしれないけど。これまで私はウィジェットを取得する方法を見つけたり、これを使ってイベントを追加したりしていません。これはフィギュアキャンバスのmpl_connectを使用して可能ですが、わかりませんが、これは境界ボックスに移動する必要があります。避けたいのは境界ボックスですが、他に解決策がない場合は問題ありません。

答えて

1

実際には、mpl_connectを使用して、ピッカーイベントをキャンバス内のオブジェクトに接続できます。この場合、annotateの呼び出しには、イベントをトリガーするオブジェクトの周りの半径を指定するpicker引数を渡すことができます。

イベントをトリガーしたオブジェクトを直接操作することができます。このオブジェクトは、イベントスロットevent.artistとして利用できます。

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax=fig.add_subplot(111) 
plt.plot([0,5],[0,6], alpha=0) 
plt.xlim([-1,6]) 
plt.ylim([-1,6]) 

for i in range(6): 
    for j in range(6): 
     an = plt.annotate("Kill me",xy=(j,i), picker=5) 


def onclick(event): 
    event.artist.set_text("I'm killed") 
    event.artist.set_color("g") 
    event.artist.set_rotation(20) 
    # really kill the text (but too boring for this example;-)) 
    #event.artist.set_visible(False) 
    # or really REALLY kill it with: 
    #event.artist.remove() 
    fig.canvas.draw() 


cid = fig.canvas.mpl_connect('pick_event', onclick) 

plt.show() 
+0

驚くばかり! 'picker'フラグの意味を明確にすることができますか? "pick_event"を使うには正の整数でなければなりませんが、なぜ5になりますか?また、少し更新しました。 – kabanus

+0

NMはドキュメントでそれについて読んでいます。私はあなたが将来の参照のためにそれを追加することをお勧めします。再度、感謝します! – kabanus

+0

編集が承認されました。 'picker'引数は、イベントを引き起こすオブジェクトの周りの半径を指定しますが、単純に' 1'または 'True'(これは同等です)に設定することもできます。 – ImportanceOfBeingErnest

関連する問題