2017-06-16 7 views
0

私はオブジェクトBをインスタンス化したオブジェクトAを持っており、そのコンストラクタでオブジェクトBはしかし、self.gen_methodFuncAnimation関数が呼び出される原因は何ですか?

self.ani = animation.FuncAnimation(
      self.figure, func=self.gen_data, fargs=[self.data_dict], 
      blit=True, repeat=False) 

と呼ばれることは決してありませんありません。これが事実でないことを確認するために私は何をしますか?

私は何をやってしまったことは、オブジェクトBrefresh()メソッドを呼び出しますが、私はアニメーションを再構築し維持する必要はありませんオブジェクトAでトリガれるコールバック、上記のコードを入れていました。それを一度だけ構築する方法があるはずですが、どうですか?

解決策は何ですか。funcが定期的に呼び出されるようにするにはどうすればよいですか?ここで

+0

? – Ding

+0

データの辞書、self.data_dictをとり、図にプロットを作成します。 署名は です。def gen_data(self、_、data_dict)です。 _はフレームのインデックス用で、使用されませんが、FuncAnimationによってデフォルトで引数として渡されます。 –

+0

FuncAnimationが正しく構築されているということは、ここで提供されている情報はほとんどありません。フレーム引数またはジェネレータの数をframes引数として追加することができます。 'frames = 40'ですが、必要ならばgen_dataメソッドに依存します。 – ImportanceOfBeingErnest

答えて

0

は正確にあなたのコードとうまく働いを使用してMinimal, Complete, and Verifiable exampleです:あなた `self.gen_method`ある

import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
import numpy as np 

class A(): 
    def __init__(self): 
     self.b = B() 

class B(): 
    def __init__(self): 
     self.figure = plt.figure() 
     plt.axis((0,1,0,1)) 
     self.l1, = plt.plot([],[], color="r") 
     self.data_dict = np.random.rand(40,10) 
     self.ani = animation.FuncAnimation(
      self.figure, func=self.gen_data, fargs=[self.data_dict], 
      blit=True, repeat=False) 

    def gen_data(self, _, data): 
     self.l1.set_data(np.linspace(0,1,10), data[_%40,:]) 
     return self.l1, 

a = A() 
plt.show() 
+0

実際には、AはAのコンストラクタにBを作成し、Bは独自のコンストラクタにアニメーションを作成します。そんなことをしてみてください。 –

+0

これはうまくいかない理由はありませんが、私はAを作成してAを更新しました。 – ImportanceOfBeingErnest

関連する問題