python-如何在animation.Funcanimation函数中更改变量

时间:2019-03-20 11:11:59

标签: python matplotlib

我实际上是在一个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我并不了解它的全部内容。

1 个答案:

答案 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()

enter image description here

一种更简洁的方法是将动画集成到一个类中,并使n0和n1成为该类的成员,并在animate(self, i)函数中进行更新。