.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "gallery/plot_secondary_axis.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_gallery_plot_secondary_axis.py: ===================================== Composing plots with a secondary axis ===================================== .. GENERATED FROM PYTHON SOURCE LINES 7-10 .. code-block:: Python # sphinx_gallery_thumbnail_number = 2 .. GENERATED FROM PYTHON SOURCE LINES 11-21 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. .. GENERATED FROM PYTHON SOURCE LINES 21-29 .. code-block:: Python import matplotlib.pyplot as plt import pyam df = pyam.IamDataFrame("tutorial_data.csv") df .. rst-class:: sphx-glr-script-out .. code-block:: none /home/docs/checkouts/readthedocs.org/user_builds/pyam-iamc/checkouts/latest/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. 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) .. GENERATED FROM PYTHON SOURCE LINES 30-45 Create a figure with different units on secondary axis ****************************************************** To create a chart with multiple axes, we directly use the **matplotlib** package and start with a subplot consisting of a figure canvas and an :class:`Axes ` object, which contains the figure elements. First, we generate a simple line chart with temperature increase in °C for one scenario and multiple models. We now tell **pyam** to specifically use the :code:`ax` instance for the plot. Then, we create a second axis :code:`ax2` using :meth:`Axes.secondary_yaxis() ` showing temperature increase in °C from the original axis :code:`ax` to temperature increase in °F. .. GENERATED FROM PYTHON SOURCE LINES 45-65 .. code-block:: Python fig, ax = plt.subplots() args = dict( scenario="CD-LINKS_NPi2020_1000", region="World", ) temperature = "AR5 climate diagnostics|Temperature|Global Mean|MAGICC6|MED" title = "Temperature change relative to pre-industrial levels" data_temperature = df.filter(**args, variable=temperature) data_temperature.plot(ax=ax, title=title, legend=False) ax2 = ax.secondary_yaxis("right", functions=(lambda x: x * 1.8, lambda x: x / 1.8)) ax2.set_ylabel("°F") plt.tight_layout() plt.show() .. image-sg:: /gallery/images/sphx_glr_plot_secondary_axis_001.png :alt: Temperature change relative to pre-industrial levels :srcset: /gallery/images/sphx_glr_plot_secondary_axis_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 66-79 Create a composed figure from several plot types ************************************************ To create a composed chart, we again use the **matplotlib** package and start with a subplot consisting of a figure canvas and an :class:`Axes ` object, which contains the figure elements. First, we generate a simple stacked chart of all components of the primary energy supply for one scenario. We now tell **pyam** to specifically use the :code:`ax` instance for the plot. Then, we create a second axes using :meth:`Axes.twinx() ` and place a second plot on this other axes. .. GENERATED FROM PYTHON SOURCE LINES 79-105 .. code-block:: Python fig, ax = plt.subplots() args = dict( model="WITCH-GLOBIOM 4.4", scenario="CD-LINKS_NPi2020_1000", region="World", ) data_energy = df.filter(**args, variable="Primary Energy|*") data_energy.plot.stack(ax=ax, title=None, legend=False) temperature = "AR5 climate diagnostics|Temperature|Global Mean|MAGICC6|MED" data_temperature = df.filter(**args, variable=temperature) ax2 = ax.twinx() format_args = dict(color="black", linestyle="--", marker="o", label="Temperature") data_temperature.plot(ax=ax2, legend=False, title=None, **format_args) ax.legend(loc=4) ax2.legend(loc=1) ax2.set_ylim(0, 2) ax.set_title("Primary energy mix and temperature") plt.tight_layout() plt.show() .. image-sg:: /gallery/images/sphx_glr_plot_secondary_axis_002.png :alt: Primary energy mix and temperature :srcset: /gallery/images/sphx_glr_plot_secondary_axis_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none /home/docs/checkouts/readthedocs.org/user_builds/pyam-iamc/checkouts/latest/pyam/plotting.py:466: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation. .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.727 seconds) .. _sphx_glr_download_gallery_plot_secondary_axis.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_secondary_axis.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_secondary_axis.py ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_