在while循环中定义多行的Matplotlib动画

时间:2018-05-21 08:07:37

标签: python python-3.x matplotlib

我正试图策划' n' x和y坐标分别由sk_x(t,tau)和sk_y(t,tau)定义的行。如果我在循环之外使用相同的函数绘制它们,它会将函数绘制得很好,但是我无法使它们在animate(i)函数内工作。空图将在几分之一秒内出现,然后消失。问题肯定在于我如何处理动画功能,但我无法弄清楚错误是什么,它使用tau作为参数而不是t而不是反过来(见第二种)一点代码。)

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


v = 1
k = 1
b = 1
c = 100
f = 200

def sk_y(t, tau):
    y = v*(t-tau)
    return y

def sk_x(t, tau):
    x = v*(np.log((1+k*t)/(1+k*tau)))/k
    return x

fig = plt.figure()
ax = plt.axes(xlim=(0, sk_x(c,0)), ylim=(0, sk_y(c,0)))
lines = [plt.plot([], [])[0] for _ in range(200)]

def init():
    m = 0
    while m < c:
        lines[m].set_data([], [])
        m+=1
    return lines


def animate(i):
    n=-1
    while n<c:
        n+=1
        t = np.linspace(0,i/2-n,100)
        x = sk_x(t+n, n)
        y = sk_y(t+n, n)
        lines[n].set_data(x, y)
    return lines   #edited in 


anim = animation.FuncAnimation(fig, animate, init_func=init, frames=f, interval=20, blit=True)

plt.show()

将此位用于animate函数可以正常工作

def animate(i):
    tau = np.linspace(i*c/f, 0,100)
    x = sk_x(c, tau)
    y = sk_y(c, tau)
    lines[0].set_data(x, y)
    return lines

非常感谢任何帮助!

编辑:在动画功能中添加了返回功能,但它仍然不能同时适用于所有行。

0 个答案:

没有答案