简介
在本实验中,你将学习如何在 Matplotlib 中使用柱坐标创建 3D 体素图。该图将演示如何使用.Axes3D.voxels的x、y和z参数来创建 3D 体素图。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到笔记本标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入库
第一步是导入本实验所需的库。我们将使用matplotlib.pyplot、numpy和matplotlib.colors。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors
定义中点函数
接下来,我们定义一个midpoints函数来计算坐标数组的中点。该函数稍后将用于计算r、theta和z的中点。
def midpoints(x):
sl = ()
for i in range(x.ndim):
x = (x[sl + np.index_exp[:-1]] + x[sl + np.index_exp[1:]]) / 2.0
sl += np.index_exp[:]
return x
定义坐标和 RGB 值
在这一步中,我们定义坐标r、theta和z,并为每个坐标附上 RGB 值。
r, theta, z = np.mgrid[0:1:11j, 0:np.pi*2:25j, -0.5:0.5:11j]
x = r*np.cos(theta)
y = r*np.sin(theta)
rc, thetac, zc = midpoints(r), midpoints(theta), midpoints(z)
## 定义一个围绕 [0.7, *, 0] 的摆动环面
sphere = (rc - 0.7)**2 + (zc + 0.2*np.cos(thetac*2))**2 < 0.2**2
## 组合颜色分量
hsv = np.zeros(sphere.shape + (3,))
hsv[..., 0] = thetac / (np.pi*2)
hsv[..., 1] = rc
hsv[..., 2] = zc + 0.5
colors = matplotlib.colors.hsv_to_rgb(hsv)
创建 3D 体素图
现在我们使用ax.voxels函数创建 3D 体素图。我们将x、y、z和sphere作为参数传入。我们还使用之前定义的colors数组添加facecolors和edgecolors。
ax = plt.figure().add_subplot(projection='3d')
ax.voxels(x, y, z, sphere,
facecolors=colors,
edgecolors=np.clip(2*colors - 0.5, 0, 1), ## 更亮
linewidth=0.5)
显示图形
最后,我们使用plt.show()函数显示图形。
plt.show()
总结
在本实验中,你学习了如何在 Matplotlib 中使用柱坐标创建 3D 体素图。你还学习了如何定义坐标和 RGB 值,以及如何使用ax.voxels函数创建 3D 体素图。