How to Create Animations in Python? - GeeksforGeeks

14 Sep, 2021
Animations are a great way to make Visualizations more attractive and user appealing. It helps us to demonstrate Data Visualization in a Meaningful Way. Python helps us to create Create Animation Visualization using existing powerful Python libraries. Matplotlib is a very popular Data Visualisation Library and is used commonly used for graphical representation of data and also for animations using inbuilt functions. 
There are two ways of Creating Animation using Matplotlib: 
Using pause() function
Using FuncAnimation() function
The pause() function in the pyplot module of the matplotlib library is used to pause for interval seconds mentioned in the argument. Consider the below example in which we will create a simple linear graph using matplotlib and show Animation in it:
Create 2 arrays, X and Y, and store values from 1 to 100.
Plot X and Y using plot() function.
Add pause() function with suitable time interval
Run the program and you’ll see the animation.
Python
from matplotlib import pyplot as plt  x = []y = []  for i in range(100):    x.append(i)    y.append(i)      # Mention x and y limits to define their range    plt.xlim(0, 100)    plt.ylim(0, 100)          # Ploting graph    plt.plot(x, y, color = 'green')    plt.pause(0.01)  plt.show()
Output : 
Similarly, you can use the pause() function to create Animation in various plots.
This FuncAnimation() Function does not create the Animation on its own, but it creates Animation from series of Graphics that we pass.
Syntax: FuncAnimation(figure, animation_function, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)
Now there are Multiple types of Animation you can make using the FuncAnimation function: 
In this example, we are creating a simple linear graph that will show an animation of a Line. Similarly, using FuncAnimation, we can create many types of Animated Visual Representations. We just need to define our animation in a function and then pass it to FuncAnimation with suitable parameters.
Python
from matplotlib import pyplot as pltfrom matplotlib.animation import FuncAnimationimport numpy as np  x = []y = []  figure, ax = plt.subplots()  # Setting limits for x and y axisax.set_xlim(0, 100)ax.set_ylim(0, 12)  # Since plotting a single graphline,  = ax.plot(0, 0)   def animation_function(i):    x.append(i * 15)    y.append(i)      line.set_xdata(x)    line.set_ydata(y)    return line,  animation = FuncAnimation(figure,                          func = animation_function,                          frames = np.arange(0, 10, 0.1),                           interval = 10)plt.show()
    Output:
In this example, we are creating a simple Bar Chart animation that will show an animation of each bar. 
Python
from matplotlib import pyplot as pltfrom matplotlib.animation import FuncAnimation, writersimport numpy as np  fig = plt.figure(figsize = (7,5))axes = fig.add_subplot(1,1,1)axes.set_ylim(0, 300)palette = ['blue', 'red', 'green',            'darkorange', 'maroon', 'black']  y1, y2, y3, y4, y5, y6 = [], [], [], [], [], []  def animation_function(i):    y1 = i    y2 = 5 * i    y3 = 3 * i    y4 = 2 * i    y5 = 6 * i    y6 = 3 * i      plt.xlabel("Country")    plt.ylabel("GDP of Country")          plt.bar(["India", "China", "Germany",              "USA", "Canada", "UK"],            [y1, y2, y3, y4, y5, y6],            color = palette)  plt.title("Bar Chart Animation")  animation = FuncAnimation(fig, animation_function,                           interval = 50)plt.show()
Output:
In this example, we will Animate Scatter Plot in python using the random function. We will be Iterating through the animation_func and while iterating we will plot random values of the x and y-axis.
Python
from matplotlib import pyplot as pltfrom matplotlib.animation import FuncAnimationimport randomimport numpy as np  x = []y = []colors = []fig = plt.figure(figsize=(7,5))  def animation_func(i):    x.append(random.randint(0,100))    y.append(random.randint(0,100))    colors.append(np.random.rand(1))    area = random.randint(0,30) * random.randint(0,30)    plt.xlim(0,100)    plt.ylim(0,100)    plt.scatter(x, y, c = colors, s = area, alpha = 0.5)  animation = FuncAnimation(fig, animation_func,                           interval = 100)plt.show()
Output:
Here we will plot a Bar Chart Race using Highest Population in a city Dataset.
Different cities will have a different bar and Bar Chart race will iterate from the year 1990 up to 2018.
We selected countries from which the topmost cities would be picked from the dataset with the highest population.
Dataset can be download from here: city_populations
Python
import pandas as pdimport matplotlib.pyplot as pltimport matplotlib.ticker as tickerfrom matplotlib.animation import FuncAnimation  df = pd.read_csv('city_populations.csv',                 usecols=['name', 'group', 'year', 'value'])  colors = dict(zip(['India','Europe','Asia',                   'Latin America','Middle East',                   'North America','Africa'],                    ['#adb0ff', '#ffb3ff', '#90d595',                     '#e48381', '#aafbff', '#f7bb5f',                      '#eafb50']))  group_lk = df.set_index('name')['group'].to_dict()  def draw_barchart(year):    dff = df[df['year'].eq(year)].sort_values(by='value',                                              ascending=True).tail(10)    ax.clear()    ax.barh(dff['name'], dff['value'],            color=[colors[group_lk[x]] for x in dff['name']])    dx = dff['value'].max() / 200          for i, (value, name) in enumerate(zip(dff['value'],                                          dff['name'])):        ax.text(value-dx, i,     name,                           size=14, weight=600,                ha='right', va='bottom')        ax.text(value-dx, i-.25, group_lk[name],                size=10, color='#444444',                 ha='right', va='baseline')        ax.text(value+dx, i,     f'{value:,.0f}',                 size=14, ha='left',  va='center')              # polished styles    ax.text(1, 0.4, year, transform=ax.transAxes,             color='#777777', size=46, ha='right',            weight=800)    ax.text(0, 1.06, 'Population (thousands)',            transform=ax.transAxes, size=12,            color='#777777')          ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))    ax.xaxis.set_ticks_position('top')    ax.tick_params(axis='x', colors='#777777', labelsize=12)    ax.set_yticks([])    ax.margins(0, 0.01)    ax.grid(which='major', axis='x', linestyle='-')    ax.set_axisbelow(True)    ax.text(0, 1.12, 'The most populous cities in the world from 1500 to 2018',            transform=ax.transAxes, size=24, weight=600, ha='left')          ax.text(1, 0, 'by @pratapvardhan; credit @jburnmurdoch',             transform=ax.transAxes, ha='right', color='#777777',             bbox=dict(facecolor='white', alpha=0.8, edgecolor='white'))    plt.box(False)    plt.show()  fig, ax = plt.subplots(figsize=(15, 8))animator = FuncAnimation(fig, draw_barchart,                          frames = range(1990, 2019))plt.show()
Output:
Picked
Python-matplotlib
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
How to Install PIP on Windows ?
How to drop one or multiple columns in Pandas Dataframe
How To Convert Python Dictionary To JSON?
Check if element exists in list in Python
Python | Pandas dataframe.groupby()
Defaultdict in Python
Python | Get unique values from a list
Python Classes and Objects
Python | os.path.join() method
Create a directory in Python