.. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` 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 .. _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 ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: stackplot_demo.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature Keywords: matplotlib code example, codex, python plot, pyplot `Gallery generated by Sphinx-Gallery `_