0

This is a reference from a previous question

two lines matplotib animation

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()

I want to plot the graph such that, it first animates the green line, then the orange line.

Currently it animates both the line together.

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

1 Answers1

1

You could make the number of steps twice as long, first draw the first curve and then the other one.

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()
JohanC
  • 71,591
  • 8
  • 33
  • 66