Matplotlib - 3D 线框图



3D 线框图是一种使用线条在三维空间中表示数据的方法,用来表示物体的形状。线框图连接物体的各个数据点,创建网格状结构来显示物体的形状。

想象一下我们有一个立方体,而不是绘制立方体的实心面,我们只显示描绘其边缘和角点的线条。我们得到的轮廓就是 3D 线框图 -

3D Wireframe Plots

Matplotlib 中的 3D 线框图

在 Matplotlib 中,3D 线框图是一种可视化类型,其中数据由形成三维表面边缘的线网络表示。

我们可以使用 'mpl_toolkits.mplot3d' 模块中的 plot_wireframe() 函数在 Matplotlib 中创建 3D 线框图。此函数接受 3D 对象的 X、Y 和 Z 坐标,并用线连接这些坐标,以创建对象的 3D 轮廓。

让我们从绘制一个基本的 3D 线框图开始。

基本的 3D 线框图

Matplotlib 中的基本 3D 线框图将 3D 对象的表面显示为线网格,使您可以可视化表面的形状和结构。线框图是通过连接球体表面的一系列点形成的,这些点之间有沿 x、y 和 z 轴延伸的直线。

要创建线框图,您可以为要可视化的表面点的 x、y 和 z 坐标定义数组。然后,您可以将这些数组传递给 plot_wireframe() 函数以生成线框图。

示例

在以下示例中,我们正在创建一个球形表面的基本 3D 线框图。首先,我们通过使用角度“theta”和“phi”改变 X、Y 和 Z 点来生成球体。然后,我们使用 plot_wireframe() 函数创建连接球体数据点的线。在生成的图中,我们得到一个球形表面的 3D 线框图 -

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Generating data for a spherical surface
theta = np.linspace(0, 2*np.pi, 100)
phi = np.linspace(0, np.pi, 100)
theta, phi = np.meshgrid(theta, phi)
r = 1
x = r * np.sin(phi) * np.cos(theta)
y = r * np.sin(phi) * np.sin(theta)
z = r * np.cos(phi)

# Creating a 3D plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plotting the spherical wireframe
ax.plot_wireframe(x, y, z, color='blue')

# Adding labels and title
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Basic 3D Wireframe Plot')

# Displaying the plot
plt.show()
输出

以下是上述代码的输出 -

Basic 3D Wireframe Plot

环形 3D 线框图

在 Matplotlib 中,环形 3D 线框图使用三维空间中的线表示环面的表面。环面是一个中间有孔的甜甜圈状物体。线框图连接环面表面的线以创建其轮廓。

示例

在这里,我们正在生成一个环形 3D 线框图。我们首先通过使用角度“theta”和“phi”以及主半径“R”和次半径“r”改变 X 和 Y 坐标来创建环面的表面,而 Z 坐标则随“r”和“phi”变化。然后,我们使用 plot_wireframe() 函数用线连接坐标,创建生成的图,该图表示环面的 3D 线框图 -

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Generating data for a toroidal surface
theta = np.linspace(0, 2*np.pi, 100)
phi = np.linspace(0, 2*np.pi, 100)
theta, phi = np.meshgrid(theta, phi)
R = 2
r = 1
x = (R + r * np.cos(phi)) * np.cos(theta)
y = (R + r * np.cos(phi)) * np.sin(theta)
z = r * np.sin(phi)

# Creating a 3D plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plotting the toroidal wireframe
ax.plot_wireframe(x, y, z, color='green')

# Adding labels and title
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Toroidal 3D Wireframe Plot')

# Displaying the plot
plt.show()
输出

执行上述代码后,我们将获得以下输出 -

Toroidal 3D Wireframe Plot

抛物面 3D 线框图

Matplotlib 中的抛物面 3D 线框图使用三维图形上的线显示抛物面的轮廓。抛物面是一个三维抛物线,类似于碗。3D 线框图连接数据点以创建抛物面的网格状结构。

示例

以下示例在 3D 空间中创建抛物面的 3D 线框图。我们通过在 3D 图表上均匀间隔 X、Y 和 Z 来创建抛物面。然后,我们使用 plot_wireframe() 函数用线连接坐标以创建 3D 线框图 -

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Generating data for a paraboloid surface
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y**2

# Creating a 3D plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plotting the paraboloid wireframe
ax.plot_wireframe(X, Y, Z, color='purple')

# Adding labels and title
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Paraboloid 3D Wireframe Plot')

# Displaying the plot
plt.show()
输出

执行上述代码后,我们将获得以下输出 -

Paraboloid 3D Wireframe Plot

圆柱体 3D 线框图

在 Matplotlib 中,圆柱体线框图是在三维空间中可视化圆柱体几何形状的一种方式。圆柱体是一种三维形状,其横截面为圆形,沿其长度延伸。圆柱体表面上的数据点用线连接起来以创建 3D 线框图。

示例

现在,我们正在 3D 图表上为圆柱体生成 3D 线框图。我们首先绘制表示圆柱体表面的 X 和 Y 坐标,通过使用半径“r”和角度“theta”(theta 范围为 0 到 2π 以覆盖整个圆形)改变它们。然后,我们绘制表示圆柱体高度的 Z 坐标。之后,我们使用 plot_wireframe() 函数用直线连接坐标。这将创建一个生成的图,该图显示圆柱体的 3D 线框图 -

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Defining the parameters
r = 1
h = 2
theta = np.linspace(0, 2*np.pi, 100)
z = np.linspace(0, h, 10)

# Generating cylinder coordinates
theta_3d, z_3d = np.meshgrid(theta, z)
x = r * np.cos(theta_3d)
y = r * np.sin(theta_3d)

# Creating a 3D plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plotting the cylindrical wireframe
ax.plot_wireframe(x, y, z_3d, color='orange')

# Adding labels and title
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Cylindrical 3D Wireframe Plot')

# Displaying the plot
plt.show()
输出

执行上述代码后,我们将获得以下输出 -

Cylindrical 3D Wireframe Plot
广告