我实际上是在一个Python项目中,需要对浓度随时间的变化进行动画处理,为此,我需要在t-1时刻的浓度值来计算在t时刻的浓度。
我希望“动画”功能在被调用时使用n0和n1的新值。目前,它仅使用与我在初始条件中声明的值相同的n0和n1值,并且未考虑在第一个绘图中对n0和n1所做的更改。
这是我的代码示例(K,L和M是恒定浮点数):
# Initial conditions
n0 = f(X)
n1 = n0.copy()
n1[1:-1] = K * (n0[0:-2] - 2 * n0[1:-1] + n0[2:]) - L * (n0[2:] - n0[:-2]) + M * n0[1:-1]
n0 = n1.copy()
# Animation
fig = plt.figure()
ax = plt.axes(xlim=(-0.5, 1.3), ylim=(min(f(X)), max(f(X))), xlabel="x", ylabel="n", title="n en fonction de x")
line, = ax.plot([], [], lw=2)
time_text = ax.text(0.02, 0.95, '', transform=ax.transAxes)
def init():
time_text.set_text('')
line.set_data([],[])
return line, time_text
def animate(i,n0,n1):
n1[1:-1] = K * (n0[0:-2] - 2 * n0[1:-1] + n0[2:]) - L * (n0[2:] - n0[:-2]) + M * n0[1:-1]
n0 = n1.copy()
t = i * dt
time_text.set_text('time = %f ms' % (t * 1000))
y = n1
line.set_data(X, y)
return line, time_text
ani = animation.FuncAnimation(fig, animate, init_func=init, frames=nt, blit=True, interval=1, repeat=False, fargs=(n0, n1))
plt.show()
希望您能为我提供帮助,因为我是动画的新用户。Funcanimation我并不了解它的全部内容。
答案 0 :(得分:0)
获得预期结果的一种相当粗略的方法是使用全局变量
Fmin2 = 0
Fmin1 = 1
fig,ax = plt.subplots(figsize=(4,4))
ax.set_xlim(0,200)
ax.set_ylim(0,200)
line, = ax.plot([], [], 'ro')
time_text = ax.text(0.02, 0.95, '', transform=ax.transAxes)
def init():
global Fmin2,Fmin1
Fmin2 = 0
Fmin1 = 1
time_text.set_text('')
line.set_data([],[])
return line, time_text
def animate(i):
global Fmin2,Fmin1
Fn = Fmin1+Fmin2
Fmin2 = Fmin1
Fmin1 = Fn
time_text.set_text('i={:d}'.format(i))
line.set_data([Fmin1],[Fn])
return line, time_text
ani = animation.FuncAnimation(fig, animate, init_func=init, frames=10, blit=True)
plt.show()
一种更简洁的方法是将动画集成到一个类中,并使n0和n1成为该类的成员,并在animate(self, i)
函数中进行更新。