Трехмерное построение в Python с использованием Matplotlib

Опубликовано: 22 Марта, 2022

Matplotlib был введен с учетом только двухмерного построения графиков. Но в то время, когда вышел релиз 1.0, 3D-утилиты были разработаны на основе 2D, и, таким образом, у нас есть 3D-реализация данных, доступная сегодня! Трехмерные графики активируются путем импорта набора инструментов mplot3d. В этой статье мы разберемся с трехмерными графиками с помощью matplotlib.

Example:

import numpy as np
import matplotlib.pyplot as plt
  
  
fig = plt.figure()
ax = plt.axes(projection ="3d")

Выход:

С указанным выше синтаксисом задействованы трехмерные оси, и данные могут быть нанесены на график в трех измерениях. Трехмерный график дает динамический подход и делает данные более интерактивными. Как и в случае с двумерными графиками, мы можем использовать разные способы представления трехмерных графиков. Мы можем сделать точечный график, контурный график, поверхностный график и т. Д. Давайте посмотрим на различные трехмерные графики.

Построение трехмерных линий и точек

График с линиями и точками - это простейший трехмерный график. ax.plot3d и ax.scatter - это функции для построения линейного и точечного графиков соответственно.

Example 1: 3 dimensional line graph

# importing mplot3d toolkits, numpy and matplotlib
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
  
fig = plt.figure()
  
# syntax for 3-D projection
ax = plt.axes(projection ="3d")
  
# defining all 3 axes
z = np.linspace(0, 1, 100)
x = z * np.sin(25 * z)
y = z * np.cos(25 * z)
  
# plotting
ax.plot3D(x, y, z, "green")
ax.set_title("3D line plot geeks for geeks")
plt.show()

Выход:

Example 2: 3 dimensional scattered graph

# importing mplot3d toolkits
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
  
fig = plt.figure()
  
# syntax for 3-D projection
ax = plt.axes(projection ="3d")
  
# defining axes
z = np.linspace(0, 1, 100)
x = z * np.sin(25 * z)
y = z * np.cos(25 * z)
c = x + y
ax.scatter(x, y, z, c = c)
  
# syntax for plotting
ax.set_title("3d Scatter plot geeks for geeks")
plt.show()

Выход:

Построение поверхностных графиков и каркасов

Поверхностный график и каркасный график работают с данными с координатной сеткой. Они берут значение сетки и наносят его на трехмерную поверхность.

Example 1: Surface graph

# importing libraries
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
  
# defining surface and axes
x = np.outer(np.linspace(-2, 2, 10), np.ones(10))
y = x.copy().T
z = np.cos(x ** 2 + y ** 3)
  
fig = plt.figure()
  
# syntax for 3-D plotting
ax = plt.axes(projection ="3d")
  
# syntax for plotting
ax.plot_surface(x, y, z, cmap ="viridis", edgecolor ="green")
ax.set_title("Surface plot geeks for geeks")
plt.show()

Выход:

Example 2: Wireframes

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
  
  
# function for z axea
def f(x, y):
    return np.sin(np.sqrt(x ** 2 + y ** 2))
  
# x and y axis
x = np.linspace(-1, 5, 10)
y = np.linspace(-1, 5, 10)
   
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
  
fig = plt.figure()
ax = plt.axes(projection ="3d")
ax.plot_wireframe(X, Y, Z, color ="green")
ax.set_title("wireframe geeks for geeks");

Выход:

Построение контурных графиков

Контурный график принимает все входные данные в виде двумерных регулярных сеток, а данные Z оцениваются в каждой точке. Мы используем функцию ax.contour3D для построения контурного графика.

Example:

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
  
  
# function for z axis
def f(x, y):
    return np.sin(np.sqrt(x ** 2 + y ** 3))
  
# x and y axis
x = np.linspace(-1, 5, 10)
y = np.linspace(-1, 5, 10)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
  
fig = plt.figure()
ax = plt.axes(projection ="3d")
  
# ax.contour3D is used plot a contour graph
ax.contour3D(X, Y, Z)

Выход:

Построение триангуляции поверхности

Приведенный выше график иногда слишком ограничен и неудобен. Таким образом, мы используем набор случайных розыгрышей. Функция ax.plot_trisurf используется для построения этого графика. Это не так ясно, но более гибко.

Example:

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
  
  
# angle and radius
theta = 2 * np.pi * np.random.random(100)
r = 6 * np.random.random(100)
  
# all three axes
x = np.ravel(r * np.sin(theta))
y = np.ravel(r * np.cos(theta))
z = f(x, y)
  
ax = plt.axes(projection ="3d")
ax.scatter(x, y, z, c = z, cmap ="viridis", linewidth = 0.25);
  
ax = plt.axes(projection ="3d")
ax.plot_trisurf(x, y, z, cmap ="viridis", edgecolor ="green");

Выход:

Построение ленты Мебиуса

Лента Мебиуса, также называемая скрученным цилиндром, представляет собой одностороннюю поверхность без границ. Чтобы создать ленту Мебиуса, подумайте о ее параметризации, это двухмерная полоса, и нам нужны два внутренних измерения. Диапазон углов от 0 до 2 кругов вокруг петли и ширина от -1 до 1.

Example:

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.tri import Triangulation
  
  
theta = np.linspace(0, 2 * np.pi, 10)
w = np.linspace(-1, 5, 8)
w, theta = np.meshgrid(w, theta)
phi = 0.5 * theta
  
# radius in x-y plane
r = 1 + w * np.cos(phi)
  
# all three axes
x = np.ravel(r * np.cos(theta))
y = np.ravel(r * np.sin(theta))
z = np.ravel(w * np.sin(phi))
  
# triangulate in the underlying 
# parametrization
tri = Triangulation(np.ravel(w), np.ravel(theta))
   
ax = plt.axes(projection ="3d")
ax.plot_trisurf(x, y, z, triangles = tri.triangles, 
                cmap ="viridis", linewidths = 0.2);

Выход:

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.