Matplotlib Fill Between

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

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

Введение

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

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

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) matplotlib(("Matplotlib")) -.-> matplotlib/PlottingDataGroup(["Plotting Data"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/BasicConceptsGroup -.-> python/booleans("Booleans") python/BasicConceptsGroup -.-> python/comments("Comments") matplotlib/PlottingDataGroup -.-> matplotlib/line_plots("Line Plots") matplotlib/PlottingDataGroup -.-> matplotlib/fill_between("Fill Between Plots") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") subgraph Lab Skills python/booleans -.-> lab-48734{{"Matplotlib Fill Between"}} python/comments -.-> lab-48734{{"Matplotlib Fill Between"}} matplotlib/line_plots -.-> lab-48734{{"Matplotlib Fill Between"}} matplotlib/fill_between -.-> lab-48734{{"Matplotlib Fill Between"}} python/lists -.-> lab-48734{{"Matplotlib Fill Between"}} python/tuples -.-> lab-48734{{"Matplotlib Fill Between"}} python/build_in_functions -.-> lab-48734{{"Matplotlib Fill Between"}} end

Основное использование

Функция fill_between может быть использована для заполнения области между двумя линиями. Параметры y1 и y2 могут быть скалярами, что означает горизонтальную границу при заданных значениях y. Если задан только y1, то y2 по умолчанию равен 0.

x = np.arange(0.0, 2, 0.01)
y1 = np.sin(2 * np.pi * x)
y2 = 0.8 * np.sin(4 * np.pi * x)

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=(6, 6))

ax1.fill_between(x, y1)
ax1.set_title('fill between y1 and 0')

ax2.fill_between(x, y1, 1)
ax2.set_title('fill between y1 and 1')

ax3.fill_between(x, y1, y2)
ax3.set_title('fill between y1 and y2')
ax3.set_xlabel('x')
fig.tight_layout()

Доверительные интервалы

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

N = 21
x = np.linspace(0, 10, 11)
y = [3.9, 4.4, 10.8, 10.3, 11.2, 13.1, 14.1,  9.9, 13.9, 15.1, 12.5]

## fit a linear curve and estimate its y-values and their error.
a, b = np.polyfit(x, y, deg=1)
y_est = a * x + b
y_err = x.std() * np.sqrt(1/len(x) +
                          (x - x.mean())**2 / np.sum((x - x.mean())**2))

fig, ax = plt.subplots()
ax.plot(x, y_est, '-')
ax.fill_between(x, y_est - y_err, y_est + y_err, alpha=0.2)
ax.plot(x, y, 'o', color='tab:brown')

Выборочное заполнение горизонтальных областей

Параметр where позволяет указать диапазоны x для заполнения. Это булевый массив того же размера, что и x. Только диапазоны x последовательностей из последовательных значений True заполняются. Таким образом, область между соседними значениями True и False никогда не заполняется. Поэтому рекомендуется установить interpolate=True, если расстояние между точками данных по оси x не слишком велико, чтобы вышеописанный эффект был заметен.

x = np.array([0, 1, 2, 3])
y1 = np.array([0.8, 0.8, 0.2, 0.2])
y2 = np.array([0, 0, 1, 1])

fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)

ax1.set_title('interpolation=False')
ax1.plot(x, y1, 'o--')
ax1.plot(x, y2, 'o--')
ax1.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3)
ax1.fill_between(x, y1, y2, where=(y1 < y2), color='C1', alpha=0.3)

ax2.set_title('interpolation=True')
ax2.plot(x, y1, 'o--')
ax2.plot(x, y2, 'o--')
ax2.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3,
                 interpolate=True)
ax2.fill_between(x, y1, y2, where=(y1 <= y2), color='C1', alpha=0.3,
                 interpolate=True)
fig.tight_layout()

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

Тот же механизм выбора можно применить для заполнения всей вертикальной высоты оси. Чтобы быть независимыми от ограничений по оси y, мы добавляем преобразование, которое интерпретирует значения x в координатах данных, а значения y в координатах оси. Следующий пример выделяет области, в которых данные по оси y выше заданного порога.

fig, ax = plt.subplots()
x = np.arange(0, 4 * np.pi, 0.01)
y = np.sin(x)
ax.plot(x, y, color='black')

threshold = 0.75
ax.axhline(threshold, color='green', lw=2, alpha=0.7)
ax.fill_between(x, 0, 1, where=y > threshold,
                color='green', alpha=0.5, transform=ax.get_xaxis_transform())

Резюме

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