3D-графика — это очень важные инструменты для визуализации данных с разными измерениями, например, данных с двумя зависимыми и одной независимой переменной.Построив 3D-графику, мы можем глубже понять данные с переменными состояниями.Для построения 3D-графиков можно использовать различные функции библиотеки matplotlib.
Пример построения трехмерных графиков с использованием Matplotlib
Сначала мы построим 3D-ось с помощью библиотеки Matplotlib. Для построения 3D-оси нам нужно просто изменить параметры проекции в plt.оси() с None в 3D.
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
Вывод:
С помощью приведенного выше синтаксиса можно включить трехмерные оси и отображать данные в трех измерениях.Трехмерный график обеспечивает динамичный подход и делает данные более интерактивными.Как и в случае с двумерными графиками, мы можем использовать разные способы представления трёхмерных графиков.Мы можем переместить точечный график, контурный график, поверхностный график и т. д.Давайте рассмотрим различные трехмерные графики.
Графики с линиями и точками — это простейшие трехмерные графики.Мы будем использовать ax.plot3d и ax.scatter функции для построение линейного и точечного графиков соответственно.
Трехмерный линейный график использование Matplotlib
Для строительства трехмерного линейного графика мы будем использовать функцию mplot3d из библиотеки mpl_toolkits.Для построения линий в 3D нам необходимо создать три переменные точки для уравнения линии.В нашем случае мы определяем три переменных как х, у и z.
# 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 axis
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()
Выход:
3-мерный рассеянный график с использованием Matplotlib
Для построения того же графика с использованием точек рассеяния мы воспользуемся функцией scatter() из matplotlib. Она построит то же уравнение прямой, используя другие точки.
# 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()
Вывод:
Графики поверхности с использованием библиотеки Matplotlib
Поверхностные графики и каркасные графики работают с данными в виде сетки. Они берут значение сетки и отображают его на трёхмерной поверхности. Мы будем использовать функцию plot_surface() для построения поверхностного графика.
# 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()
Вывод:
Построение каркасных графиков с использованием библиотеки Matplotlib
Для построения графика каркасных диаграмм мы будем использовать функцию plot_wireframe() из библиотеки matplotlib.
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 ** 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');
Вывод:
Контурные графики с использованием библиотеки Matplotlib
Контурный график принимает все входные данные в виде двумерных регулярных сеток, и данные Z вычисляются в каждой точке. Мы используем функцию ax.contour 3D для построения контурного графика. Контурные графики - отличный способ визуализации графиков оптимизации.
def function(x, y):
return np.sin(np.sqrt(x ** 2 + y ** 2))
x = np.linspace(-10, 10, 40)
y = np.linspace(-10, 10, 40)
X, Y = np.meshgrid(x, y)
Z = function(X, Y)
fig = plt.figure(figsize=(10, 8))
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap='cool', alpha=0.8)
ax.set_title('3D Contour Plot of function(x, y) =\
sin(sqrt(x^2 + y^2))', fontsize=14)
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_zlabel('z', fontsize=12)
plt.show()
Вывод:
Построение триангуляций поверхности на Python
Приведённый выше график иногда слишком ограничен и неудобен. Поэтому в этом методе мы используем набор случайных значений. Функция ax.plot_trisurf используется для построения этого графика. Он не такой понятный, но более гибкий.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.tri import Triangulation
def f(x, y):
return np.sin(np.sqrt(x ** 2 + y ** 2))
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
tri = Triangulation(X.ravel(), Y.ravel())
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(tri, Z.ravel(), cmap='cool', edgecolor='none', alpha=0.8)
ax.set_title('Surface Triangulation Plot of f(x, y) =\
sin(sqrt(x^2 + y^2))', fontsize=14)
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('y', fontsize=12)
ax.set_zlabel('z', fontsize=12)
plt.show()
Вывод:
Построение полосы Мебиуса на Python
Лента Мёбиуса,также называемая скрученным цилиндром, представляет собой одностороннюю поверхность без границ. Чтобы создать ленту Мёбиуса, подумайте о её параметризации, это двумерная лента, и нам нужны два внутренних измерения. Её угол варьируется от 0 до 2 π вокруг петли, а ширина — от -1 до 1.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Define the parameters of the Möbius strip
R = 2
# Define the Möbius strip surface
u = np.linspace(0, 2*np.pi, 100)
v = np.linspace(-1, 1, 100)
u, v = np.meshgrid(u, v)
x = (R + v*np.cos(u/2)) * np.cos(u)
y = (R + v*np.cos(u/2)) * np.sin(u)
z = v * np.sin(u/2)
# Create the plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Plot the Möbius strip surface
ax.plot_surface(x, y, z, alpha=0.5)
# Set plot properties
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Möbius Strip')
# Set the limits of the plot
ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
ax.set_zlim([-3, 3])
# Show the plot
plt.show()
Вывод: