Matplotlib анимация нескольких строк, определенных в цикле while - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь построить '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

Любая помощь будет принята с благодарностью!

Редактировать: добавлена ​​функция возврата в функцию анимации, но онавсе еще не работает для всех строк одновременно, как я хочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...