6

WxPython GUI に埋め込まれた matplotlib の図を使用して、データを表示しています。Figure の内容 (表示されるデータ) は、クリックされたボタンの機能によって絶えず変化します。

データは2種類。

1) 等高線

self.axes.contour(x_scale_map,y_scale_map,matrix,cl,cmap=my_cmap,extent=0,matrix.shape[1]-1,0,matrix.shape[0]-1))

これはロードに比較的時間がかかります (~1 秒) が、頻繁に変更されることはありません。

2)この輪郭の上に、たとえばいくつかの線をプロットします

self.axes.axhline(y,color='black')

これらの線は明らかに即座に描画され、ユーザーがクリックする機能によって頻繁に変化します。このような状況では、以前に描いた線を消し、新しい線を表示する必要がありますが、等高線図は変更されません。

さて、私の問題は次のとおりです。輪郭ではなく線のみを削除する方法が見つかりませんでした。望ましい結果を得る唯一の方法は、次のように思われます。

self.axes.clear()

次に、輪郭と新しい線の両方を再プロットします。しかし、前述のように、輪郭を毎回リロードするのは遅く、面倒です。

図から線のみをクリアする方法はありますか? 次のようなことを行って、重ね合わせたサブプロットを使用しようとしました。

self.axes1 = self.fig.add_subplot(111)
self.axes2 = self.fig.add_subplot(111)
self.axes1.contour(...)
self.axes2.axhline(y,color='black')
self.axes2.clear()

しかし、この最後の行は図全体をクリアします。

目的の機能を実現する方法を知っている人はいますか? ありがとう

4

2 に答える 2

6

次のQ&Aは、この問題の解決策を提供します。

つまり、図から線を削除できるようにするには:

1) 描画時に参照を保存することで、線を追跡します。

my_line = self.axes.axhline(y,color='black')

2) 削除は次のように行われます。

my_line.remove()
del my_line
于 2013-01-24T01:09:45.153 に答える