Matplotlib 绘制 3D 平面及点

Matplotlib 绘制 3D 平面及点

Matplotlib 是 Python 中一个强大的绘图库,支持多种图形、散点图、线图等等。其中,我们可以使用 Matplotlib 绘制 3D 平面及点。

阅读更多:Matplotlib 教程

什么是 3D 平面及点

3D 平面及点一般指在三维空间中绘制平面和具有坐标的点。简单来说,就是我们可以在三维坐标系中使用点、线、面来绘制物体。在科学计算、物理学、工程技术、计算机图形学以及生物学等领域都有广泛应用。

对于平面,可以通过一般式构造平面方程,即:

  • $ax + by + cz = d$

其中,(a,b,c) 表示平面法向量,d 为距离常数。

对于点,则可以直接使用三维坐标 (x,y,z) 来表示。

现在,我们就可以使用 Matplotlib 绘制出一个 3D 平面及点的图形了。

绘制 3D 平面及点

首先,我们需要引入 Matplotlib 绘图库,代码如下:

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

然后,我们先来定义一个 3D 坐标系:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

接着,我们定义一个 3D 平面:

# 构造平面方程
# 2x + 3y - 4z = 5
x, y = np.meshgrid(range(-10, 10), range(-10, 10))
z = (2 * x + 3 * y - 5) / 4

# 绘制平面
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=plt.cm.rainbow)

代码中,我们使用 meshgrid 生成平面坐标数据,进而根据平面方程计算出平面上每个点的 z 坐标,并使用 plot_surface() 绘制平面。

接下来,我们在平面上绘制一组点:

# 绘制点
p = np.array([[2, 5, 1], [-3, -2, 0], [4, -3, 2], [-1, 1, -1], [0, -3, 3]])
ax.scatter(p[:, 0], p[:, 1], p[:, 2], color='red', s=50)

代码中,我们定义了一个 5 个点的列表 p,并使用 scatter() 绘制散点图。

现在,我们就可以得到一个 3D 平面及点的图形了。完整代码如下:

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 构造平面方程
# 2x + 3y - 4z = 5
x, y = np.meshgrid(range(-10, 10), range(-10, 10))
z = (2 * x + 3 * y - 5) / 4

# 绘制平面
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=plt.cm.rainbow)

# 绘制点
p = np.array([[2, 5, 1], [-3, -2, 0], [4, -3, 2], [-1, 1, -1], [0, -3, 3]])
ax.scatter(p[:, 0], p[:, 1], p[:, 2], color='red', s=50)

plt.show()

运行代码后,我们可以看到平面及点的图形。如下图所示:

默认情况下,使用 Matplotlib 绘制出来的 3D 图形并不够美观,我们可以通过优化绘制效果来改善这种情况。

调整视角

首先,我们可以通过调整视角来改变 3D 图形的展示效果。在 Matplotlib 中,我们可以通过 view_init() 函数来调整视角。

例如,我们可以将视角调整为左上角:

ax.view_init(elev=25, azim=-135)

调整颜色映射

我们也可以通过调整颜色映射来改变绘制颜色。在 Matplotlib 中,我们可以通过 cmap 参数来指定颜色映射。

例如,我们可以将颜色映射设置为灰色:

ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=plt.cm.gray)

线条、点大小及透明度调整

我们还可以通过调整线条、点大小及透明度来改变绘制效果。在 Matplotlib 中,我们可以通过 linewidth, s, alpha 参数来分别设置线条宽度、点大小以及透明度。

例如,我们可以将线条宽度设置为 0.5,点大小设置为 100,透明度设置为 0.8:

ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=plt.cm.gray, linewidth=0.5, alpha=0.8)
ax.scatter(p[:, 0], p[:, 1], p[:, 2], color='red', s=100, alpha=0.8)

总结

Matplotlib 是 Python 中一个极为强大的绘图库,支持多种图形、散点图、线图等等。针对 3D 平面及点的绘制,我们可以通过构造平面方程及点的三维坐标,进而使用 plot_surface()scatter() 函数来绘制 3D 平面及点。在此基础上,我们可以通过调整视角、颜色映射、线条、点大小及透明度等绘制效果来改变绘制效果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程