4

wxpythonGUI内でmatplotlibを使用しています。要するに、私はたくさんのデータをプロットしました。次に、データポイントをクリックします(次の場所にあるDataCursorを使用)。

MATLABのdatacursormodeに相当するmatplotlibはありますか?

また

wxPython内のmatplotlibに注釈をポップアップします

2番目のリンクは私の実際の実装です。datacursorクラスを他のクラスから参照します。何が気になりますか、イベントボタンをクリックして注釈を削除するにはどうすればよいですか?たとえば、散布図を更新するイベントボタンがあります(図をクリアするのではなく、plot_handle.set_dataを使用します)。ただし、ポイントが存在するかどうかに関係なく、注釈は正確に元の場所に残ります。どうすれば削除できますか?

ありがとう!

4

2 に答える 2

7

ほとんどのmatplotlibオブジェクトにはremove()関数があります(私はそれがから継承されていると思いますArtist)。削除したいオブジェクトでそれを呼び出すだけです。

編集:

あなたが持っている場合

dc = DataCursor(...) # what ever aruguements you give it
# bunch of code
dc.annotation.remove()
del dc
plt.draw() # need to redraw to make remove visible

Pythonには「private」属性の概念がないため、オブジェクトの内部に到達して、アノテーションに対してremoveを呼び出すことができます。詳細については、クラスのチュートリアルを参照してください

これの欠点は、オブジェクトが奇妙な状態になっていることです。他に参照がある場合は、動作が悪い可能性があります。DataCursorオブジェクトを周囲に保持したい場合は、その関数annotationを使用してオブジェクトを変更するset_*か、オブジェクトの可視性を変更して一時的に非表示にすることができます(doc) 。

于 2012-08-31T21:19:32.287 に答える
1

アーティストのように削除するには、アーティストのように追加する必要があります

arrow2 = matplotlib.text.Annotation("I love it",xy=(0.5,0.5),xycoords='data',arrowprops=dict(arrowstyle="-")) 
ax2.add_artist(arrow2) 
arrow2.remove() 
于 2013-09-04T21:52:44.627 に答える