2017-02-24 17 views
1

Matplotlibのドキュメントからボタンの例を変更して、プロットにテキスト注釈を追加します。私の問題は、ボタンが押されるたびにアノテーションを更新する適切な方法を見つけることができないということです。私はremove()メソッドを試しましたが、動作していません。ボタンを使用してMatplotlibのアノテーションを更新する

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Button 

freqs = np.arange(2, 20, 3) 

fig, ax = plt.subplots() 
plt.subplots_adjust(bottom=0.2) 
t = np.arange(0.0, 1.0, 0.001) 
s = np.sin(2*np.pi*freqs[0]*t) 
l, = plt.plot(t, s, lw=2) 


class Index(object): 
    ind = 0 

    def next(self, event): 
     self.ind += 1 
     i = self.ind % len(freqs) 
     ydata = np.sin(2*np.pi*freqs[i]*t) 
     l.set_ydata(ydata) 
     plt.annotate("lalala", (0, 0)) 
     plt.draw() 

    def prev(self, event): 
     self.ind -= 1 
     i = self.ind % len(freqs) 
     ydata = np.sin(2*np.pi*freqs[i]*t) 
     l.set_ydata(ydata) 
     plt.annotate("lelele", (0.50, 0)) 
     plt.draw() 

callback = Index() 
axprev = plt.axes([0.7, 0.05, 0.1, 0.075]) 
axnext = plt.axes([0.81, 0.05, 0.1, 0.075]) 
bnext = Button(axnext, 'Next') 
bnext.on_clicked(callback.next) 
bprev = Button(axprev, 'Previous') 
bprev.on_clicked(callback.prev) 

plt.show() 

助けてください。

surceコード:http://matplotlib.org/examples/widgets/buttons.html

答えて

1

は、残念ながら、それはあなたが達成しようとしているものを、完全には明らかではありません。

あなたはもちろん、コールバッククラス内のアノテーションを更新するオプションがあります:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Button 

freqs = np.arange(2, 20, 3) 

fig, ax = plt.subplots() 
plt.subplots_adjust(bottom=0.2) 
t = np.arange(0.0, 1.0, 0.001) 
s = np.sin(2*np.pi*freqs[0]*t) 
l, = plt.plot(t, s, lw=2) 
ann = ax.annotate("", (0, 0)) 

class Index(object): 
    ind = 0 

    def next(self, event): 
     self.ind += 1 
     i = self.ind % len(freqs) 
     ydata = np.sin(2*np.pi*freqs[i]*t) 
     l.set_ydata(ydata) 
     ann.set_text("next clicked") 
     ann.set_position((0.6,0.5)) 
     plt.draw() 

    def prev(self, event): 
     self.ind -= 1 
     i = self.ind % len(freqs) 
     ydata = np.sin(2*np.pi*freqs[i]*t) 
     l.set_ydata(ydata) 
     ann.set_text("previous clicked") 
     ann.set_position((0.3,0.5)) 
     plt.draw() 

callback = Index() 
axprev = plt.axes([0.7, 0.05, 0.1, 0.075]) 
axnext = plt.axes([0.81, 0.05, 0.1, 0.075]) 
bnext = Button(axnext, 'Next') 
bnext.on_clicked(callback.next) 
bprev = Button(axprev, 'Previous') 
bprev.on_clicked(callback.prev) 

plt.show() 
+0

これはあなたが望むものではない場合、あなたはあなたの質問を更新し、あなたが目指している、具体的内容を説明する必要があるだろうで。 – ImportanceOfBeingErnest

関連する問題