Matplotlib 简明教程

Matplotlib - 3D Wireframe Plots

三维线框图是一种使用线表示对象形状来表示三维数据的方法。三维线框图连接对象的数据点以创建网格状结构来显示对象形状。

想象一下我们有一个立方体,而不是绘制立方体的实心面,我们只显示勾勒其边缘和角的线。我们得到的轮廓就是三维线框图 −

3d wireframe plots1

3D Wireframe Plot in Matplotlib

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

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

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

Basic 3D Wireframe Plot

Matplotlib 中的基本三维线框图将三维对象的表面显示为一条线网格,让你可以可视化曲面的形状和结构。线框图是通过用沿着 x、y 和 z 轴运行的直线连接球面上的一系列点来形成的。

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

在以下示例中,我们正在创建球面的基本三维线框图。首先,我们通过改变角度“θ”和“φ”来生成球体的 X、Y 和 Z 点。然后,我们使用 plot_wireframe() 函数创建连接球体数据点的线。在结果图中,我们得到了球形表面三维线框图 −

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()

以下是上面代码的输出: -

3d wireframe plots2

Toroidal 3D Wireframe Plot

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

在这里,我们正在生成一个环形的三维线框图。我们首先通过改变角度“θ”和“φ”以及主半径“R”和次半径“r”来创建环面的表面,而 Z 坐标随着“r”和“φ”而变化。然后,我们使用 plot_wireframe() 函数连接坐标与线,创建了一个结果图,表示环面的三维线框图 −

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()

执行上述代码,我们将得到以下输出 −

3d wireframe plots3

Paraboloid 3D Wireframe Plot

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

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

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()

执行上面的代码后,我们得到以下输出: -

3d wireframe plots4

Cylindrical 3D Wireframe Plot

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

现在,我们在三维图形上生成一个圆柱体的三维线框图。我们首先绘制表示圆柱表面的 X 和 Y 坐标,通过半径“r”和角度“θ”来改变它们(θ 在 0 到 2π 范围内以覆盖一个圆)。然后,我们绘制表示圆柱高度的 Z 坐标。在此之后,我们使用 plot_wireframe() 函数用直线连接坐标。这创建了一个结果图,它显示了圆柱形的三维线框图 −

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()

执行上述代码,我们将得到以下输出 −

3d wireframe plots5