Введение
В этом руководстве мы узнаем, как создавать полигоны, заполняющие пространство под линией на графике в трехмерной диаграмме с использованием библиотеки Matplotlib для Python. Полигоны будут полупрозрачными, создавая своего рода эффект "рваного彩绘 стекла".
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений в Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем необходимые библиотеки
Начнем с импорта необходимых библиотек.
import math
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import PolyCollection
Определяем функцию для полигона под графиком
Далее определим функцию polygon_under_graph(x, y), которая строит список вершин, определяющий полигон, заполняющий пространство под линией графика (x, y). Эта функция предполагает, что x упорядочен по возрастанию.
def polygon_under_graph(x, y):
"""
Construct the vertex list which defines the polygon filling the space under
the (x, y) line graph. This assumes x is in ascending order.
"""
return [(x[0], 0.), *zip(x, y), (x[-1], 0.)]
Создаем трехмерную диаграмму
Теперь мы создадим трехмерную диаграмму с использованием Matplotlib.
ax = plt.figure().add_subplot(projection='3d')
Определяем массивы x и lambda
Мы определяем массивы x и lambda с использованием функций linspace и range соответственно.
x = np.linspace(0., 10., 31)
lambdas = range(1, 9)
Вычисляем вершины и цвета граней
Мы вычисляем вершины и цвета граней с использованием функций vectorize и colormaps из Matplotlib.
## verts[i] is a list of (x, y) pairs defining polygon i.
gamma = np.vectorize(math.gamma)
verts = [polygon_under_graph(x, l**x * np.exp(-l) / gamma(x + 1))
for l in lambdas]
facecolors = plt.colormaps['viridis_r'](np.linspace(0, 1, len(verts)))
Создаем полигоны и добавляем их на график
Мы создаем полигоны с использованием функции PolyCollection из Matplotlib и добавляем их на график.
poly = PolyCollection(verts, facecolors=facecolors, alpha=.7)
ax.add_collection3d(poly, zs=lambdas, zdir='y')
Задаем пределы и метки графика
Наконец, мы задаем пределы и метки графика с использованием функции set.
ax.set(xlim=(0, 10), ylim=(1, 9), zlim=(0, 0.35),
xlabel='x', ylabel=r'$\lambda$', zlabel='probability')
Показываем график
Мы отображаем график с использованием функции show.
plt.show()
Резюме
В этом уроке мы узнали, как создавать полигоны, заполняющие пространство под линией на 3D-графике с использованием библиотеки Matplotlib для Python. Мы использовали функцию PolyCollection для создания полигонов и задавали пределы и метки графика с использованием функции set.