Stacked column chart with Python

Cedric Vidonne

Lei Chen

Stacked column chart with Python

The stacked column chart stacks vertical bars that represent different groups on top of each other. The height of the stacked bar shows the combined value of the groups. They show the cumulative values of a data item and compare parts to the whole.

More about: Stacked column chart


Basic stacked column chart

# import libraries
import matplotlib.pyplot as plt
import pandas as pd
plt.style.use(['unhcrpyplotstyle', 'column'])

#load data set
df = pd.read_csv('https://raw.githubusercontent.com/GDS-ODSSS/unhcr-dataviz-platform/master/data/comparison/column_stacked.csv')

#reshape df from long to wide
df = df.pivot(index='year', columns='rst_type', values='rst_in_thousand')
df = df.reset_index()

#compute data array for plotting
x = df['year']
y1 = df['UNHCR resettlement']
y2 = df['Other resettlement']

#plot the chart
fig, ax = plt.subplots()
rect1=ax.bar(x, y1, label='UNHCR resettlement')
rect2=ax.bar(x, y2, bottom=y1, label='Other resettlement')

#set chart title
ax.set_title('Resettlement by UNHCR and others | 2010-2020', pad=50)

#set chart legend
ax.legend(loc=(0,1.05), ncol=2)

#set y-axis title
ax.set_ylabel('Number of people (thousands)')

#set tick label 
ax.tick_params(labelleft=True)

#set x-axis tick and label
ax.set_xticks(x)

#set x-axis limit
ylimit = plt.ylim(0, 180)

#show grid below the bars
ax.grid(axis='y')

#set chart source and copyright
plt.annotate('Source: UNHCR Refugee Data Finder', (0,0), (0, -25), xycoords='axes fraction', textcoords='offset points', va='top', color = '#666666', fontsize=9)
plt.annotate('©UNHCR, The UN Refugee Agency', (0,0), (0, -35), xycoords='axes fraction', textcoords='offset points', va='top', color = '#666666', fontsize=9)

#adjust chart margin and layout
fig.tight_layout()

#show chart
plt.show()

A stacked column chart showing resettlement by UNHCR and others | 2010-2020


Stacked column chart with data label

# import libraries
import matplotlib.pyplot as plt
import pandas as pd
plt.style.use(['unhcrpyplotstyle','column'])

#load data set
df = pd.read_csv('https://raw.githubusercontent.com/GDS-ODSSS/unhcr-dataviz-platform/master/data/comparison/column_stacked.csv')

#reshape df from long to wide
df = df.pivot(index='year', columns='rst_type', values='rst_in_thousand')
df = df.reset_index()

#prepare data array for plotting
x = df['year']
y1 = df['UNHCR resettlement']
y2 = df['Other resettlement']

#plot the chart
fig, ax = plt.subplots()
rect1=ax.bar(x, y1, label='UNHCR resettlement')
rect2=ax.bar(x, y2, bottom=y1, label='Other resettlement')

#set chart title
ax.set_title('Resettlement by UNHCR and others | 2010-2020', pad=50)

#set subtitle
plt.suptitle('Number of people in thousands', x=0.18, y=0.88)

#set chart legend
ax.legend(loc=(0,1.05), ncol=2)

#set x-axis tick and label
ax.set_xticks(x)

#set formatted data label
ax.bar_label(rect1, label_type='center')
ax.bar_label(rect2, label_type='center')

#set chart source and copyright
plt.annotate('Source: UNHCR Refugee Data Finder', (0,0), (0, -25), xycoords='axes fraction', textcoords='offset points', va='top', color = '#666666', fontsize=9)
plt.annotate('©UNHCR, The UN Refugee Agency', (0,0), (0, -35), xycoords='axes fraction', textcoords='offset points', va='top', color = '#666666', fontsize=9)

#adjust chart margin and layout
fig.tight_layout()

#show chart
plt.show()

A stacked column chart showing resettlement by UNHCR and others | 2010-2020


Related chart with Python