Как создать задержку между несколькими анимациями на одном графике (matplotlib, python) - PullRequest
0 голосов
/ 18 июня 2020

Это отсылка к предыдущему вопросу

двухстрочная анимация matplotib

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

x = np.arange(130, 190, 1)
y = 97.928 * np.exp(- np.exp(-  0.1416 *( x - 146.1 )))
z = 96.9684 * np.exp(- np.exp(-0.1530*( x - 144.4)))

fig, ax = plt.subplots()
line1, = ax.plot(x, y, color = "r")
line2, = ax.plot(x, z, color = "g")

def update(num, x, y, z, line1, line2):
    line1.set_data(x[:num], y[:num])
    line2.set_data(x[:num], z[:num])
    return [line1,line2]

ani = animation.FuncAnimation(fig, update, len(x), fargs=[x, y, z, line1, line2],
              interval=295, blit=True)

ax.set_xlabel('Age (day)')
ax.set_ylabel('EO (%)')

plt.show()

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

В настоящее время она анимирует обе строки вместе.

https://i.stack.imgur.com/ZDlXu.gifenter image description here

1 Ответ

1 голос
/ 18 июня 2020

Вы можете увеличить количество шагов вдвое, сначала нарисовав первую кривую, а затем вторую.

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

x = np.arange(130, 190, 1)
y = 97.928 * np.exp(- np.exp(-  0.1416 * (x - 146.1)))
z = 96.9684 * np.exp(- np.exp(-0.1530 * (x - 144.4)))

fig, ax = plt.subplots()
line1, = ax.plot(x, y, color="r")
line2, = ax.plot(x, z, color="g")

def update(num, x, y, z, line1, line2):
    if num < len(x):
        line1.set_data(x[:num], y[:num])
        line2.set_data([], [])
    else:
        line2.set_data(x[:num - len(x)], z[:num - len(x)])
    return [line1, line2]

ani = animation.FuncAnimation(fig, update, 2 * len(x), fargs=[x, y, z, line1, line2],
                              interval=295, blit=True)

ax.set_xlabel('Age (day)')
ax.set_ylabel('EO (%)')
plt.show()
...