Animating "growing" line plot in Python/Matplotlib Animating "growing" line plot in Python/Matplotlib python python

Animating "growing" line plot in Python/Matplotlib


A couple of notes:

First off, the reason that things become progressively slower is that you're drawing more and more and more overlapping lines in the same position.

A quick fix is to clear the plot each time:

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 10, 100)y = np.sin(x)plt.figure()for n in range(len(x)):    plt.cla()    plt.plot(x[:n], y[:n], color='k')    plt.axis([0, 10, 0, 1])    plt.savefig('Frame%03d.png' %n)

Better yet, however, update both the x and y data at the same time:

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 10, 100)y = np.sin(x)fig, ax = plt.subplots()line, = ax.plot(x, y, color='k')for n in range(len(x)):    line.set_data(x[:n], y[:n])    ax.axis([0, 10, 0, 1])    fig.canvas.draw()    fig.savefig('Frame%03d.png' %n)

And if you'd like to use the animation module (side note: blit=True may not work properly on some backends (e.g. OSX), so try blit=False if you have issues):

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.animation as animationx = np.linspace(0, 10, 100)y = np.sin(x)fig, ax = plt.subplots()line, = ax.plot(x, y, color='k')def update(num, x, y, line):    line.set_data(x[:num], y[:num])    line.axes.axis([0, 10, 0, 1])    return line,ani = animation.FuncAnimation(fig, update, len(x), fargs=[x, y, line],                              interval=25, blit=True)ani.save('test.gif')plt.show()

enter image description here