.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        Click :ref:`here <sphx_glr_download_gallery_lines_bars_and_markers_stackplot_demo.py>`     to download the full example code
    .. rst-class:: sphx-glr-example-title

    .. _sphx_glr_gallery_lines_bars_and_markers_stackplot_demo.py:


===========================
Stackplots and streamgraphs
===========================

Stackplots
----------

Stackplots draw multiple datasets as vertically stacked areas. This is
useful when the individual data values and additionally their cumulative
value are of interest.


.. code-block:: default



    import numpy as np
    import matplotlib.pyplot as plt

    # data from United Nations World Population Prospects (Revision 2019)
    # https://population.un.org/wpp/, license: CC BY 3.0 IGO
    year = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2018]
    population_by_continent = {
        'africa': [228, 284, 365, 477, 631, 814, 1044, 1275],
        'americas': [340, 425, 519, 619, 727, 840, 943, 1006],
        'asia': [1394, 1686, 2120, 2625, 3202, 3714, 4169, 4560],
        'europe': [220, 253, 276, 295, 310, 303, 294, 293],
        'oceania': [12, 15, 19, 22, 26, 31, 36, 39],
    }

    fig, ax = plt.subplots()
    ax.stackplot(year, population_by_continent.values(),
                 labels=population_by_continent.keys())
    ax.legend(loc='upper left')
    ax.set_title('World population')
    ax.set_xlabel('Year')
    ax.set_ylabel('Number of people (millions)')

    plt.show()




.. image:: /gallery/lines_bars_and_markers/images/sphx_glr_stackplot_demo_001.png
    :alt: World population
    :class: sphx-glr-single-img





Streamgraphs
------------

Using the *baseline* parameter, you can turn an ordinary stacked area plot
with baseline 0 into a stream graph.


.. code-block:: default



    # Fixing random state for reproducibility
    np.random.seed(19680801)


    def gaussian_mixture(x, n=5):
        """Return a random mixture of *n* Gaussians, evaluated at positions *x*."""
        def add_random_gaussian(a):
            amplitude = 1 / (.1 + np.random.random())
            dx = x[-1] - x[0]
            x0 = (2 * np.random.random() - .5) * dx
            z = 10 / (.1 + np.random.random()) / dx
            a += amplitude * np.exp(-(z * (x - x0))**2)
        a = np.zeros_like(x)
        for j in range(n):
            add_random_gaussian(a)
        return a


    x = np.linspace(0, 100, 101)
    ys = [gaussian_mixture(x) for _ in range(3)]

    fig, ax = plt.subplots()
    ax.stackplot(x, ys, baseline='wiggle')
    plt.show()



.. image:: /gallery/lines_bars_and_markers/images/sphx_glr_stackplot_demo_002.png
    :alt: stackplot demo
    :class: sphx-glr-single-img






.. rst-class:: sphx-glr-timing

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


.. _sphx_glr_download_gallery_lines_bars_and_markers_stackplot_demo.py:


.. only :: html

 .. container:: sphx-glr-footer
    :class: sphx-glr-footer-example



  .. container:: sphx-glr-download sphx-glr-download-python

     :download:`Download Python source code: stackplot_demo.py <stackplot_demo.py>`



  .. container:: sphx-glr-download sphx-glr-download-jupyter

     :download:`Download Jupyter notebook: stackplot_demo.ipynb <stackplot_demo.ipynb>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    Keywords: matplotlib code example, codex, python plot, pyplot
    `Gallery generated by Sphinx-Gallery
    <https://sphinx-gallery.readthedocs.io>`_
