
In this article, you’ll learn how to create a bar chart race animation such as the one above using the matplotlib data visualization library in python. Bar chart races have been around for quite some time. This year, they’ve taken social media by storm. Now that you’ve seen the result, let’s build it up gradually.
What is a bar chart race?
A chart race is an animated sequence of bars that show data values at different moments in time. The bars re-position themselves at each time period so that they remain in order.
The idea behind a chart race is to create a transition of bars, that moves slowly to their new respective positions and allows the user to easily track their movement.
Lets start by importing the libraries
import pandas as pd import matplotlib.pyplot as plt import matplotlib.ticker as ticker import matplotlib.animation as animation from IPython.display import HTML
Download the Data set
df = pd.read_csv('city_populations.csv', usecols=['name', 'group', 'year', 'value'])
Color and Labels
Here, I will use colors
and group_lk
methods to add color to the bars.
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()
fig, ax = plt.subplots(figsize=(15, 8)) def draw_barchart(current_year): dff = df[df['year'].eq(current_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') ax.text(1, 0.4, current_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.15, 'The most populous cities in the world from 1500 to 2018', transform=ax.transAxes, size=24, weight=600, ha='left', va='top') ax.text(1, 0, 'by @thecleverprogrammer; credit @Amankharwal', transform=ax.transAxes, color='#777777', ha='right', bbox=dict(facecolor='white', alpha=0.8, edgecolor='white')) plt.box(False) draw_barchart(2018)

Animate
Now I will use the FuncAnimation
from matplotlib.animation
to animate the bar chart.
fig, ax = plt.subplots(figsize=(15, 8)) animator = animation.FuncAnimation(fig, draw_barchart, frames=range(1900, 2019)) HTML(animator.to_jshtml())

I hope you liked this article on Bar Chart Race tutorial. Feel free to ask your questions in the comments section below. You can also follow me on Medium to learn every topic of Machine Learning.