2013-11-12 1 views
1

Я пытаюсь поместить набор matplotlib.animation в функцию класса. Хотя мне кажется, что мне не очень повезло. Я пробовал оба, FunctionAnimation() & ArtistAnimation(). И для обоих я, похоже, не могу заставить их работать (хотя они сильно отличаются).Python Script для анимации набора строк в классе

# ------------------------------ # 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
# ------------------------------ # 
class AniPlot(): 
    def __init__(self): 
     self.fig = plt.figure() 
     self.ax = plt.axes(xlim=(-3.5, 3.5), ylim=(-5, 2)) 
     self.line, = self.ax.plot([], [], lw=2) 


    def set_data(self,tvector): 
     self.data = tvector 

    def ani_init(self): 
     self.line.set_data([], []) 

    def ani_update(i): 
     x = self.data[i][0] 
     y = self.data[i][1] 

     self.line.set_data(x, y) 
     return self.line, 


    def animate(self): 
     anim = animation.FuncAnimation(self.fig, self.ani_update, init_func=self.ani_init, 
           frames=4, interval=20, blit=True) 
     plt.show() 

# ------------------------------ # 

data = [ 
[[0,0,1,0],[0,-1,-2,-3]], 
[[0,0,0,0.1],[0,-1,-3,-4]], 
[[0,0,0.5,0],[0,-1,-2.5,-3.5]], 
[[0,0,1,2],[0,-1,-2,-2.5]] 
     ] 
myani = AniPlot() 
myani.set_data(data) 
myani.animate() 

Я хочу попытаться обвести вокруг себя, а не использовать чужой код. Хотя я использовал других в качестве отправной точки. Может ли кто-нибудь помочь?

ответ

2

(предупреждение:. Новичок здесь)

Я думаю, что лучший способ для «Anim», чтобы придерживаться фактически установить его в качестве переменной экземпляра, используя self.anim:

self.anim = ... 

Кроме того, необходимо добавить «я» здесь:

def ani_update(self, i) 

Я использую Spyder 2.1.10 и это, кажется, работает, хотя анимация немного быстро.

+0

Спасибо, Роберто, я оставил «я». хотя я все еще получаю ** «TypeError: объект« NoneType »не является итерируемым» **. Это может быть моя версия? – CromeX

+0

Вы можете избежать ошибки, поставив blit = False (тогда мне нужно время, чтобы узнать, почему проблема возникает в первую очередь - или вам нужен более опытный пользователь для совета!). – Roberto

+0

спасибо, Роберт, это работает. Я тоже новичок! – CromeX

Смежные вопросы