Customizing legendsΒΆ

This is a short tutorial showing how different arguments to the legend keyword in the pyam plotting library affects where the legend is located.

We use the scenario ensemble from the first-steps tutorial (link).

[1]:
import pyam
pyam - INFO: Running in a notebook, setting `pyam` logging level to `logging.INFO` and adding stderr handler
[2]:
df = (
    pyam.IamDataFrame(data='tutorial_data.csv')
    .filter(variable='Emissions|CO2', region='World')
)

df.head()
pyam.core - INFO: Reading file `tutorial_data.csv`
[2]:
model scenario region variable unit year value
0 AIM/CGE 2.1 CD-LINKS_INDCi World Emissions|CO2 Mt CO2/yr 2010 33954.0254
1 AIM/CGE 2.1 CD-LINKS_INDCi World Emissions|CO2 Mt CO2/yr 2020 39274.5709
2 AIM/CGE 2.1 CD-LINKS_INDCi World Emissions|CO2 Mt CO2/yr 2030 36068.4425
3 AIM/CGE 2.1 CD-LINKS_INDCi World Emissions|CO2 Mt CO2/yr 2040 38447.2877
4 AIM/CGE 2.1 CD-LINKS_INDCi World Emissions|CO2 Mt CO2/yr 2050 39519.9596

By default, a legend will not appear if there are too many entries.

[3]:
df.line_plot()
pyam.plotting - INFO: >=13 labels, not applying legend
[3]:
<AxesSubplot:title={'center':'region: World variable: Emissions|CO2'}, xlabel='Year', ylabel='Mt CO2/yr'>
../_images/tutorials_legends_4_2.png

By using the color argument, we tell the pyam plotting library to apply colours by model family. This reduces the number of legend entries (from 38 model-scenario combinations to 8 model families), and the legend will be shown by default with matplotib standard settings.

[4]:
df.line_plot(color='model')
[4]:
<AxesSubplot:title={'center':'region: World variable: Emissions|CO2'}, xlabel='Year', ylabel='Mt CO2/yr'>
../_images/tutorials_legends_6_1.png

You can use standard matplotlib legend arguments by passing a dictionary of keyword arguments.

[5]:
df.line_plot(color='model', legend=dict(loc='center left'))
[5]:
<AxesSubplot:title={'center':'region: World variable: Emissions|CO2'}, xlabel='Year', ylabel='Mt CO2/yr'>
../_images/tutorials_legends_8_1.png

However, we also offer support for a few standard special cases, namely legends to the right of a plot and legends below the plot

[6]:
from pyam.plotting import OUTSIDE_LEGEND
[7]:
df.line_plot(color='model', legend=OUTSIDE_LEGEND['right'])
[7]:
<AxesSubplot:title={'center':'region: World variable: Emissions|CO2'}, xlabel='Year', ylabel='Mt CO2/yr'>
../_images/tutorials_legends_11_1.png
[8]:
df.line_plot(color='model', legend=OUTSIDE_LEGEND['bottom'])
[8]:
<AxesSubplot:title={'center':'region: World variable: Emissions|CO2'}, xlabel='Year', ylabel='Mt CO2/yr'>
../_images/tutorials_legends_12_1.png