2015-01-04 308 views
2

我正在設計一個模擬查看器,其中點使用matplotlib中的FuncAnimation動畫。動畫未在matplotlib動畫

這是我到目前爲止(VX,VY,M,t_lim將在以後使用)。它只產生一個空白的情節,沒有任何動作。

我從here的第一個例子中複製了一些。

這真的很簡單(字面意思是兩個點在一個時間步聚在一起),爲什麼這不工作?

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

class visualisation(object): 
    def __init__(self, X, Y, VX, VY, M, t_lim=None): 
     self.X = X 
     self.Y = Y 
     self.VX = VX 
     self.VY = VY 
     self.M = M 
     self.t_lim = t_lim 

     self.fig = plt.figure() 
     addx = (X.max() - X.min()) * 0.05 
     addy = (Y.max() - Y.min()) * 0.05 
     self.ax = plt.axes(xlim=(X.min()-addx, X.max()+addx), ylim=(Y.min()-addy, Y.max()+addy)) 
     self.points, = self.ax.plot([], [], 'b.', ms=10) 

    def init(self): 
     self.points.set_data([], []) 
     return self.points, 

    def animator(self, i): 
     print self.X[:,i] 
     self.points.set_data(self.X[:,i], self.Y[:,i]) 
     return self.points, 

    def animate(self): 
     return animation.FuncAnimation(self.fig, self.animator, init_func=self.init, frames=200, interval=20, blit=True) 


M_sun = 2.99e30 
N = 1000 

ms = np.array([1., 1.]) * M_sun 

#initial conditions 
xs = np.zeros([len(ms), N]) #[n, t] 
xs[:, 0] = [0, 1] 

ys = np.zeros([len(ms), N]) #[n, t] 
ys[:, 0] = [0, 1] 

vxs, vys = (np.zeros_like(xs))*2 

visual = visualisation(xs, ys, vxs, vys, ms) 
visual.animate() 

plt.show() 

回答

2

你必須保存您在animate(self)創建FuncAnimation對象。否則,它plt.show()之前收集的垃圾被稱爲:

amin = visual.animate() 

或:

def animate(self): 
    self.anim = animation.FuncAnimation(self.fig, self.animator, 
      init_func=self.init, frames=200, interval=20, blit=True)