Matplotlib. Урок 5. Построение 3D графиков. Работа с mplot3d Toolkit

Автор: | 30.10.2019

До этого момента все графики, которые мы строили были двумерные, 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
  • rstride, cstride : int
  • 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”.
Книга: Линейная алгебра на Python
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas.  Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге Pandas. Работа с данными”.
Книга: Pandas. Работа с данными

Matplotlib. Урок 5. Построение 3D графиков. Работа с mplot3d Toolkit: 4 комментария

    1. Аноним

      сокращение numpy общепринятое для удобства и быстроты написания кода

  1. Константин

    Добрый день!
    Подскажите как изменить размеры области построения графика?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *