动画在 matplotlib 中没有动画
Animation not animated in matplotlib
我正在设计一个模拟查看器,其中使用 matplotlib 中的 FuncAnimation 对点进行动画处理。
这就是我目前所掌握的(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()
您必须保存在 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)
我正在设计一个模拟查看器,其中使用 matplotlib 中的 FuncAnimation 对点进行动画处理。
这就是我目前所掌握的(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()
您必须保存在 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)