Stacked bar charts

# sphinx_gallery_thumbnail_number = 4

Read in tutorial data and show a summary

This gallery uses the scenario data from the first-steps tutorial.

If you haven’t cloned the pyam GitHub repository to your machine, you can download the file from https://github.com/IAMconsortium/pyam/tree/main/docs/tutorials.

Make sure to place the data file in the same folder as this script/notebook.

import matplotlib.pyplot as plt

import pyam
from pyam.plotting import add_net_values_to_bar_plot

df = pyam.IamDataFrame("tutorial_data.csv")
df
/home/docs/checkouts/readthedocs.org/user_builds/pyam-iamc/checkouts/stable/pyam/utils.py:318: FutureWarning:

The previous implementation of stack is deprecated and will be removed in a future version of pandas. See the What's New notes for pandas 2.1.0 for details. Specify future_stack=True to adopt the new implementation and silence this warning.


<class 'pyam.core.IamDataFrame'>
Index:
 * model    : AIM/CGE 2.1, GENeSYS-MOD 1.0, ... WITCH-GLOBIOM 4.4 (8)
 * scenario : 1.0, CD-LINKS_INDCi, CD-LINKS_NPi, ... Faster Transition Scenario (8)
Timeseries data coordinates:
   region   : R5ASIA, R5LAM, R5MAF, R5OECD90+EU, R5REF, R5ROWO, World (7)
   variable : ... (6)
   unit     : EJ/yr, Mt CO2/yr, °C (3)
   year     : 2010, 2020, 2030, 2040, 2050, 2060, 2070, 2080, ... 2100 (10)

Show stacked bar chart by categories

First, we generate a simple stacked bar chart of all components of primary energy supply for one scenario.

Calling tight_layout() ensures that the final plot looks nice and tidy.

args = dict(model="WITCH-GLOBIOM 4.4", scenario="CD-LINKS_NPi2020_1000")
data = df.filter(**args, variable="Primary Energy|*", region="World")

data.plot.bar(stacked=True, title="Primary energy mix")
plt.legend(loc=1)
plt.tight_layout()
plt.show()
Primary energy mix

Flip the direction of a stacked bar chart

We can flip that round for a horizontal chart.

data.plot.bar(stacked=True, orient="h", title="Primary energy mix")
plt.legend(loc=1)
plt.tight_layout()
plt.show()
Primary energy mix

Show stacked bar chart by regions

We don’t just have to plot subcategories of variables, any data or meta indicators from the IamDataFrame can be used. Here, we show the contribution by region to total CO2 emissions.

data = df.filter(**args, variable="Emissions|CO2").filter(region="World", keep=False)

data.plot.bar(
    bars="region", stacked=True, title="CO2 emissions by region", cmap="tab20"
)
plt.legend(loc=1)
plt.tight_layout()
plt.show()
CO2 emissions by region

Add indicators to show net values

Sometimes, stacked bar charts have negative entries. In that case, it helps to add a line showing the net value.

fig, ax = plt.subplots()
data.plot.bar(
    ax=ax, bars="region", stacked=True, title="CO2 emissions by region", cmap="tab20"
)
add_net_values_to_bar_plot(ax)
plt.legend(loc=1)
plt.tight_layout()
plt.show()
CO2 emissions by region

Total running time of the script: (0 minutes 1.220 seconds)

Gallery generated by Sphinx-Gallery