Анимированный график с использованием вопроса matplotlib? - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь построить анимированный график для некоторых данных, которые у меня есть. Код работает отлично, но хотелось бы, чтобы линия шла медленно и пошагово. Я пытался настроить интервал, но он отображался слишком быстро. подскажите где я делаю не так? код ниже

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

fig, ax = plt.subplots()

max_x = 12
max_rand = 0.5

x = np.arange(0, max_x)
ax.set_ylim(0, max_rand)
line, = ax.plot([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [0.2993408770000, 0.2861708408982, 0.2798758117082,
                                                         0.2798758117081, 0.2576574556766,
                                                         0.2569827358085, 0.2462213069654, 0.2461901361123,
                                                         0.2455803085695, 0.2455803085695, 0.2455803085695,
                                                         0.2455803085695])


def init():  # give a clean slate to start
    line.set_ydata([np.nan] * len(x))
    return line,


def animate(i):  # update the y values (every 1000ms)
    line.set_ydata(np.array([0.2993408770000, 0.2861708408982, 0.2798758117082,
                             0.2798758117081, 0.2576574556766,
                             0.2569827358085, 0.2462213069654, 0.2461901361123,
                             0.2455803085695, 0.2455803085695, 0.2455803085695,
                             0.2455803085695]))
    return line,


ani = animation.FuncAnimation(
    fig, animate, init_func=init, interval=1000, blit=True, save_count=5)

plt.show()

1 Ответ

0 голосов
/ 18 февраля 2020

Вы не меняете положение y внутри функции animate, поэтому движения не будет. Вам необходимо изменить положение в зависимости от входного параметра i.

. В приведенном ниже коде y0 представляет начальную позицию (например, ноль), а y1 представляет конец должность. Переменная numsteps определяет, на сколько шагов кривая движется от начальной к конечной позиции. interval понижен, чтобы получить более плавную анимацию.

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

fig, ax = plt.subplots()

max_x = 12
max_rand = 0.5
num_steps = 200

x = np.arange(0, max_x)
# y0 : starting position of the curve
y0 = x*0
# y1 : final position of the curve
y1 = np.array([0.2993408770000, 0.2861708408982, 0.2798758117082, 0.2798758117081, 0.2576574556766, 0.2569827358085,
               0.2462213069654, 0.2461901361123, 0.2455803085695, 0.2455803085695, 0.2455803085695, 0.2455803085695])

ax.set_ylim(0, max_rand)
line, = ax.plot(x, y0, color='crimson')

def init():  # give a clean slate to start
    line.set_ydata(np.full_like(x, np.NaN))
    return line,

def animate(i):  # update the y values (every 100ms)
    line.set_ydata(y0 * (1 - i / num_steps) + y1 * i / num_steps)
    return line,

ani = animation.FuncAnimation(
    fig, animate, init_func=init, interval=100, blit=True, save_count=5, frames=num_steps, repeat=False)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...