Я пытаюсь построить 'n' линий, координаты x и y которых определены sk_x (t, tau) и sk_y (t, tau) соответственно.Если я нанесу их с помощью одной и той же функции за пределами цикла, то функция будет построена нормально, но я не смогу заставить их работать внутри функции animate (i).Пустой график появляется на долю секунды, а затем исчезает.Проблема определенно заключается в том, как я обрабатываю функцию animate, но я не могу понять, что же не так, она работала с параметром 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()
Использование этого бита для функции анимации работает нормально
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
Любая помощь будет принята с благодарностью!
Редактировать: добавлена функция возврата в функцию анимации, но онавсе еще не работает для всех строк одновременно, как я хочу.