Stackplot и Streamgraph в Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом лабораторном занятии вы научитесь использовать Matplotlib для создания стековых диаграмм и стримграфиков. Стековые диаграммы полезны, когда вы хотите визуализировать несколько наборов данных в виде вертикально наложенных областей. Стримграфики - это модификация стековых диаграмм, в которых базовая линия графика не фиксируется в нуле. Вместо этого базовая линия «колеблется», чтобы области графика были сглажены и плавно переходили друг в друга.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами при обучении, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импорт библиотек

Первым шагом является импорт необходимых библиотек, в данном случае это Matplotlib и NumPy.

import matplotlib.pyplot as plt
import numpy as np

Создание стековой диаграммы

Вторым шагом является создание стековой диаграммы с использованием функции stackplot(). Мы будем использовать данные из "Всемирных перспектив по популяции ООН (ревизия 2019)" для создания стековой диаграммы численности населения мира по континентам с 1950 по 2018 год.

## 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(), alpha=0.8)
ax.legend(loc='upper left', reverse=True)
ax.set_title('World population')
ax.set_xlabel('Year')
ax.set_ylabel('Number of people (millions)')

plt.show()

Создание стримграфика

Третий шаг - создание стримграфика с использованием функции stackplot() с параметром baseline, установленным на 'wiggle'. Мы создадим случайную смесь Гауссовых функций и изобразим их в виде стримграфика.

## 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()

Резюме

Поздравляем! Вы научились создавать стековые диаграммы и стримграфики с использованием Matplotlib. Стековые диаграммы полезны для визуализации нескольких наборов данных в виде вертикально наложенных областей, в то время как стримграфики - это модификация стековых диаграмм, в которых базовая линия «колеблется», чтобы области графика были сглажены и плавно переходили друг в друга.