In Python, plotting graphs is straightforward — you can use powerful libraries like Matplotlib. It happens, however, that you need to visualize the trend over time of some variables – that is, you need to animate the graphs.
Luckily, it’s just as easy to create animations as it is to create plots with Matplotlib.
Matplotlib – as you can read on the official site – is a comprehensive library for creating static, animated, and interactive visualizations in Python. You can plot interactive graphs, histograms, bar charts, and so on.
How to Install Matplotlib
Installing Matplotlib is simple. Just open up your terminal and run:
pip install matplotlib
Also, if you don’t have numpy, please install it so you can follow the examples in this tutorial:
pip install numpy
How to Plot with Matplotlib
Even though this tutorial is about animations in Matplotlib, first let’s create a simple static graph of a sine wave:
import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 10, 0.1) y = np.sin(x) fig = plt.figure() ax = plt.axes(xlim=(0, 10), ylim=(-1.1, 1.1)) diagram = plt.plot(x, y) plt.show()
How to Animate with Matplotlib
To create an animation with Matplotlib you need to use Matplotlib’s
For instance, let’s create an animation of a sine wave:
import numpy as np from matplotlib import pyplot as plt from matplotlib.animation import FuncAnimation fig = plt.figure() ax = plt.axes(xlim=(0, 5), ylim=(-1.5, 1.5)) line, = ax.plot(, , lw=2) def init(): line.set_data(, ) return line, def animate(i): x = np.linspace(0, 5, 500) y = np.sin(2 * np.pi * (x + 0.02 * i)) line.set_data(x, y) return line, sinewawe_animation = FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True) sinewawe_animation.save("Animation.gif") plt.show()
Let’s then go through the code above in a bit more detail to better understand how animations work with Matplotlib.
Here you add the required libraries. In particular, we add the
FuncAnimation class that can be used to create an animation for you.
fig = plt.figure() ax = plt.axes(xlim=(0, 5), ylim=(-1.5, 1.5)) line, = ax.plot(, , lw=2)
Here you first create an empty window for the animation figure. Then you create an empty
line object. This
line is later modified to form the animation.
def init(): line.set_data(, ) return line,
Here you create an
init() function that sets the initial state for the animation.
You then create an
animate() function. This is the function that gives rise to the sine wave. It takes the frame number
i as its argument, then it creates a sine wave that is shifted according to the frame number (the bigger it is, the more the wave is shifted). Finally, it returns the updated
line object. Now the
animation framework updates the graph based on how the
line has changed.
def animate(i): x = np.linspace(0, 5, 500) y = np.sin(2 * np.pi * (x + 0.02 * i)) line.set_data(x, y) return line,
sinewawe_animation = FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True)
This line of code puts it all together and creates the actual animation object. It simply:
- Renders an animation to the figure
figby repeatedly calling the
animate()function starting from the initial state defined by
- The number of frames rendered to “one round of animation” is
- A delay between two frames is
1000ms / 20ms = 50 FPS).
blit=Truemakes sure only changed pieces of the plot are drawn, to improve the efficiency)
This piece of code is used to generate an animated gif (the same one I used in this tutorial to show you the animation)
You guessed it — this line shows the animation.