До этого момента все графики, которые мы строили были двумерные, Matplotlib позволяет строить 3D графики. Этой теме посвящен данный урок.
Импортируем необходимые модули для работы с 3D:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D
В библиотеке доступны инструменты для построения различных типов графиков. Рассмотрим некоторые из них более подробно.
Линейный график
Для построения линейного графика используется функция plot().
Axes3D.plot(self, xs, ys, *args, zdir=’z’, **kwargs)
- xs: 1D массив
- x координаты.
- ys: 1D массив
- y координаты.
- zs: скалярное значение или 1D массив
- z координаты. Если передан скаляр, то он будет присвоен всем точкам графика.
- zdir: {‘x’, ‘y’, ‘z’}
- Определяет ось, которая будет принята за z направление, значение по умолчанию: ‘z’.
- **kwargs
- Дополнительные аргументы, аналогичные тем, что используются в функции plot() для построения двумерных графиков.
x = np.linspace(-np.pi, np.pi, 50) y = x z = np.cos(x) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot(x, y, z, label='parametric curve')
Точечный график
Для построения точечного графика используется функция scatter().
Axes3D.scatter(self, xs, ys, zs=0, zdir=’z’, s=20, c=None, depthshade=True, *args, **kwargs)
- xs, ys: массив
- Координаты точек по осям x и y.
- zs: float или массив, optional
- Координаты точек по оси z. Если передан скаляр, то он будет присвоен всем точкам графика. Значение по умолчанию: 0.
- zdir: {‘x’, ‘y’, ‘z’, ‘-x’, ‘-y’, ‘-z’}, optional
- Определяет ось, которая будет принята за z направление, значение по умолчанию: ‘z’
- s: скаляр или массив, optional
- Размер маркера. Значение по умолчанию: 20.
- c: color, массив, массив значений цвета, optional
- Цвет маркера. Возможные значения:
- Строковое значение цвета для всех маркеров.
- Массив строковых значений цвета.
- Массив чисел, которые могут быть отображены в цвета через функции cmap и norm.
- 2D массив, элементами которого являются RGB или RGBA.
- Цвет маркера. Возможные значения:
- depthshade: bool, optional
- Затенение маркеров для придания эффекта глубины.
- **kwargs
- Дополнительные аргументы, аналогичные тем, что используются в функции scatter() для построения двумерных графиков.
np.random.seed(123) x = np.random.randint(-5, 5, 40) y = np.random.randint(0, 10, 40) z = np.random.randint(-5, 5, 40) s = np.random.randint(10, 100, 20) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x, y, z, s=s)
Каркасная поверхность
Для построения каркасной поверхности используется функция plot_wireframe().
plot_wireframe(self, X, Y, Z, *args, **kwargs)
- X, Y, Z: 2D массивы
- Данные для построения поверхности.
- rcount, ccount: int
- Максимальное количество элементов каркаса, которое будет использовано в каждом из направлений. Значение по умолчанию: 50.
- rstride, cstride: int
- Параметры определяют величину шага, с которым будут браться элементы строки / столбца из переданных массивов. Параметры rstride, cstride и rcount, ccount являются взаимоисключающими.
- **kwargs
- Дополнительные аргументы, определяемые Line3DCollection.
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j] x = np.cos(u)*np.sin(v) y = np.sin(u)*np.sin(v) z = np.cos(v) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_wireframe(x, y, z) ax.legend()
Поверхность
Для построения поверхности используйте функцию plot_surface().
plot_surface(self, X, Y, Z, *args, norm=None, vmin=None, vmax=None, lightsource=None, **kwargs)
- X, Y, Z : 2D массивы
- Данные для построения поверхности.
- rcount, ccount : int
- см. rcount, ccount в “Каркасная поверхность“.
- rstride, cstride : int
- см.rstride, cstride в “Каркасная поверхность“.
- color: color
- Цвет для элементов поверхности.
- cmap: Colormap
- Colormap для элементов поверхности.
- facecolors: массив элементов color
- Индивидуальный цвет для каждого элемента поверхности.
- norm: Normalize
- Нормализация для colormap.
- vmin, vmax: float
- Границы нормализации.
- shade: bool
- Использование тени для facecolors. Значение по умолчанию: True.
- lightsource: LightSource
- Объект класса LightSource – определяет источник света, используется, только если shade = True.
- **kwargs
- Дополнительные аргументы, определяемые Poly3DCollection.
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j] x = np.cos(u)*np.sin(v) y = np.sin(u)*np.sin(v) z = np.cos(v) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(x, y, z, cmap='inferno') ax.legend()
P.S.
Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
np?
import numpy as np
сокращение numpy общепринятое для удобства и быстроты написания кода
Добрый день!
Подскажите как изменить размеры области построения графика?
# plt.ylim([начало, конец])
# plt.xlim([начало, конец])