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 平面及点。在此基础上,我们可以通过调整视角、颜色映射、线条、点大小及透明度等绘制效果来改变绘制效果。