Creating Animated Plots with Matplotlib

PythonPythonBeginner
Practice Now

This tutorial is from open-source community. Access the source code

Introduction

Matplotlib is a data visualization library used to create static, animated, and interactive visualizations in Python. In this lab, we will learn how to create an animated plot using Matplotlib. We will use the FuncAnimation class to create an animation of a decaying sine wave.

VM Tips

After the VM startup is done, click the top left corner to switch to the Notebook tab to access Jupyter Notebook for practice.

Sometimes, you may need to wait a few seconds for Jupyter Notebook to finish loading. The validation of operations cannot be automated because of limitations in Jupyter Notebook.

If you face issues during learning, feel free to ask Labby. Provide feedback after the session, and we will promptly resolve the problem for you.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("`Python`")) -.-> python/BasicConceptsGroup(["`Basic Concepts`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/BasicConceptsGroup(["`Basic Concepts`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/PlottingDataGroup(["`Plotting Data`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/PlotCustomizationGroup(["`Plot Customization`"]) matplotlib(("`Matplotlib`")) -.-> matplotlib/AdvancedTopicsGroup(["`Advanced Topics`"]) python(("`Python`")) -.-> python/ControlFlowGroup(["`Control Flow`"]) python(("`Python`")) -.-> python/DataStructuresGroup(["`Data Structures`"]) python(("`Python`")) -.-> python/FunctionsGroup(["`Functions`"]) python(("`Python`")) -.-> python/ModulesandPackagesGroup(["`Modules and Packages`"]) python(("`Python`")) -.-> python/AdvancedTopicsGroup(["`Advanced Topics`"]) python(("`Python`")) -.-> python/DataScienceandMachineLearningGroup(["`Data Science and Machine Learning`"]) python/BasicConceptsGroup -.-> python/comments("`Comments`") matplotlib/BasicConceptsGroup -.-> matplotlib/importing_matplotlib("`Importing Matplotlib`") matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("`Understanding Figures and Axes`") matplotlib/PlottingDataGroup -.-> matplotlib/line_plots("`Line Plots`") matplotlib/PlotCustomizationGroup -.-> matplotlib/grid_config("`Grid Configuration`") matplotlib/AdvancedTopicsGroup -.-> matplotlib/animation_creation("`Animation Creation`") python/ControlFlowGroup -.-> python/conditional_statements("`Conditional Statements`") python/ControlFlowGroup -.-> python/for_loops("`For Loops`") python/DataStructuresGroup -.-> python/lists("`Lists`") python/DataStructuresGroup -.-> python/tuples("`Tuples`") python/FunctionsGroup -.-> python/function_definition("`Function Definition`") python/ModulesandPackagesGroup -.-> python/importing_modules("`Importing Modules`") python/ModulesandPackagesGroup -.-> python/standard_libraries("`Common Standard Libraries`") python/AdvancedTopicsGroup -.-> python/generators("`Generators`") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("`Numerical Computing`") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("`Data Visualization`") subgraph Lab Skills python/comments -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} matplotlib/importing_matplotlib -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} matplotlib/figures_axes -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} matplotlib/line_plots -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} matplotlib/grid_config -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} matplotlib/animation_creation -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/conditional_statements -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/for_loops -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/lists -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/tuples -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/function_definition -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/importing_modules -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/standard_libraries -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/generators -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/numerical_computing -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} python/data_visualization -.-> lab-48539{{"`Creating Animated Plots with Matplotlib`"}} end

Import libraries

First, we need to import the necessary libraries. We will be using Matplotlib and NumPy in this lab.

import itertools

import matplotlib.pyplot as plt
import numpy as np

import matplotlib.animation as animation

Create the data generator function

Next, we need to create a function to generate the data for the animation. The function will produce a sine wave that decays over time. We will use the itertools.count() function to generate an infinite sequence of numbers. We will use these numbers to calculate the values of the sine wave.

def data_gen():
    for cnt in itertools.count():
        t = cnt / 10
        yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)

Set up the plot

Now, we need to set up the plot. We will create a figure and an axes object using Matplotlib's subplots() function. We will also create a line object to represent the sine wave.

fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []

Define the initialization function

We need to define an initialization function that will set the initial state of the plot. In this function, we will set the y-axis limits and clear the data from the line object.

def init():
    ax.set_ylim(-1.1, 1.1)
    ax.set_xlim(0, 1)
    del xdata[:]
    del ydata[:]
    line.set_data(xdata, ydata)
    return line,

Define the animation function

Now, we need to define the function that will update the plot for each frame of the animation. This function will take the data generated by the data_gen() function and update the plot with the new data. We will also update the x-axis limits as the animation progresses.

def run(data):
    ## update the data
    t, y = data
    xdata.append(t)
    ydata.append(y)
    xmin, xmax = ax.get_xlim()

    if t >= xmax:
        ax.set_xlim(xmin, 2*xmax)
        ax.figure.canvas.draw()
    line.set_data(xdata, ydata)

    return line,

Create the animation

Finally, we can create the animation using the FuncAnimation class. We will pass the fig, run, data_gen, init_func, and interval parameters to create the animation. We will also set the save_count parameter to 100 to ensure that only the last 100 frames are saved.

ani = animation.FuncAnimation(fig, run, data_gen, interval=100, init_func=init,
                              save_count=100)

Show the plot

We can now show the plot using Matplotlib's show() function.

plt.show()

Summary

In this lab, we learned how to create an animated plot using Matplotlib. We used the FuncAnimation class to create an animation of a decaying sine wave. We also learned how to set up a plot, define a data generator function, define an initialization function, define an animation function, and create the animation.

Other Python Tutorials you may like