Matplotlib Fill Between и Alpha

PythonPythonBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В визуализации данных иногда необходимо выделить определенные области или диапазоны на графике. Функция fill_between Matplotlib - это полезный инструмент для создания заштрихованной области между минимальной и максимальной границами. Она также может быть использована для улучшения визуального вида графика. Аргумент alpha можно использовать для настройки прозрачности заштрихованной области. В этом практическом занятии мы проведем вас через несколько примеров использования fill_between и alpha в Matplotlib для создания более наглядных и информативных графиков.

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

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

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

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

Улучшение линейного графика с использованием fill_between

Первый пример демонстрирует, как улучшить линейный график с использованием fill_between. Мы будем использовать финансовые данные от Google для создания двух подграфиков: один с простым линейным графиком, а другой с заштрихованным линейным графиком.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cbook as cbook

## load up some sample financial data
r = cbook.get_sample_data('goog.npz')['price_data'].view(np.recarray)

## create two subplots with the shared x and y axes
fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)

pricemin = r.close.min()

ax1.plot(r.date, r.close, lw=2)
ax2.fill_between(r.date, pricemin, r.close, alpha=0.7)

for ax in ax1, ax2:
    ax.grid(True)
    ax.label_outer()

ax1.set_ylabel('price')
fig.suptitle('Google (GOOG) daily closing price')
fig.autofmt_xdate()

Использование alpha для смягчения цветов

Аргумент alpha также можно использовать для смягчения цветов в более визуально привлекательных графиках. В следующем примере мы вычислим две популяции случайных блуждателей с разными средними значениями и стандартными отклонениями нормальных распределений, из которых выбираются шаги. Мы используем заштрихованные области для отображения +/− одного стандартного отклонения от средней позиции популяции.

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

Nsteps, Nwalkers = 100, 250
t = np.arange(Nsteps)

## an (Nsteps x Nwalkers) array of random walk steps
S1 = 0.004 + 0.02*np.random.randn(Nsteps, Nwalkers)
S2 = 0.002 + 0.01*np.random.randn(Nsteps, Nwalkers)

## an (Nsteps x Nwalkers) array of random walker positions
X1 = S1.cumsum(axis=0)
X2 = S2.cumsum(axis=0)

## Nsteps length arrays empirical means and standard deviations of both
## populations over time
mu1 = X1.mean(axis=1)
sigma1 = X1.std(axis=1)
mu2 = X2.mean(axis=1)
sigma2 = X2.std(axis=1)

## plot it!
fig, ax = plt.subplots(1)
ax.plot(t, mu1, lw=2, label='mean population 1')
ax.plot(t, mu2, lw=2, label='mean population 2')
ax.fill_between(t, mu1+sigma1, mu1-sigma1, facecolor='C0', alpha=0.4)
ax.fill_between(t, mu2+sigma2, mu2-sigma2, facecolor='C1', alpha=0.4)
ax.set_title(r'random walkers empirical $\mu$ and $\pm \sigma$ interval')
ax.legend(loc='upper left')
ax.set_xlabel('num steps')
ax.set_ylabel('position')
ax.grid()

Выделение определенных областей с использованием where

Аргумент ключевого слова where очень удобен для выделения определенных областей графика. where принимает булевую маску той же длины, что и аргументы x, ymin и ymax, и заполняет только ту область, где булева маска имеет значение True. В следующем примере мы моделируем одного случайного блуждателя и вычисляем аналитическое среднее значение и стандартное отклонение позиций популяции. Среднее значение популяции показано пунктиром, а плюс/минус одно стандартное отклонение от среднего показано в виде заштрихованной области. Мы используем маску where X > upper_bound, чтобы найти область, где блуждатель находится за пределами одного стандартного отклонения, и закрашиваем эту область в красный цвет.

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

Nsteps = 500
t = np.arange(Nsteps)

mu = 0.002
sigma = 0.01

## the steps and position
S = mu + sigma*np.random.randn(Nsteps)
X = S.cumsum()

## the 1 sigma upper and lower analytic population bounds
lower_bound = mu*t - sigma*np.sqrt(t)
upper_bound = mu*t + sigma*np.sqrt(t)

fig, ax = plt.subplots(1)
ax.plot(t, X, lw=2, label='walker position')
ax.plot(t, mu*t, lw=1, label='population mean', color='C0', ls='--')
ax.fill_between(t, lower_bound, upper_bound, facecolor='C0', alpha=0.4,
                label='1 sigma range')
ax.legend(loc='upper left')

## here we use the where argument to only fill the region where the
## walker is above the population 1 sigma boundary
ax.fill_between(t, upper_bound, X, where=X > upper_bound, fc='red', alpha=0.4)
ax.fill_between(t, lower_bound, X, where=X < lower_bound, fc='red', alpha=0.4)
ax.set_xlabel('num steps')
ax.set_ylabel('position')
ax.grid()

Выделение интервалов на осях с использованием axhspan и axvspan

Еще один удобный способ использования заштрихованных областей - это выделение горизонтальных или вертикальных интервалов на оси. Для этого в Matplotlib есть вспомогательные функции axhspan и axvspan. См. галерею axhspan_demo для получения дополнительной информации.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.axhspan(0.25, 0.75, facecolor='0.5', alpha=0.5)
ax.axvspan(6, 7, facecolor='r', alpha=0.5)

plt.show()

Резюме

В этом практическом занятии мы узнали, как использовать функцию fill_between и аргумент alpha в Matplotlib для создания более наглядных и информативных графиков. Мы продемонстрировали несколько примеров использования fill_between и alpha для выделения определенных областей или диапазонов на графике. Мы также кратко познакомились с функциями axhspan и axvspan для выделения интервалов на оси.