使用 Matplotlib 进行 3D 体素绘图

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本实验将指导你使用 Python 中的 Matplotlib 库创建 3D 体素图的过程。体素图对于以清晰且美观的方式可视化 3D 数据非常有用。在本实验中,我们将使用 Axes3D.voxels 函数创建两个立方体及其之间连接的体素图。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) matplotlib(("Matplotlib")) -.-> matplotlib/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) matplotlib/BasicConceptsGroup -.-> matplotlib/importing_matplotlib("Importing Matplotlib") matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("Understanding Figures and Axes") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("Numerical Computing") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("Data Visualization") subgraph Lab Skills matplotlib/importing_matplotlib -.-> lab-49028{{"使用 Matplotlib 进行 3D 体素绘图"}} matplotlib/figures_axes -.-> lab-49028{{"使用 Matplotlib 进行 3D 体素绘图"}} python/lists -.-> lab-49028{{"使用 Matplotlib 进行 3D 体素绘图"}} python/tuples -.-> lab-49028{{"使用 Matplotlib 进行 3D 体素绘图"}} python/build_in_functions -.-> lab-49028{{"使用 Matplotlib 进行 3D 体素绘图"}} python/importing_modules -.-> lab-49028{{"使用 Matplotlib 进行 3D 体素绘图"}} python/numerical_computing -.-> lab-49028{{"使用 Matplotlib 进行 3D 体素绘图"}} python/data_visualization -.-> lab-49028{{"使用 Matplotlib 进行 3D 体素绘图"}} end

导入必要的库

首先,我们需要导入必要的库。在这种情况下,我们将使用 Matplotlib 和 NumPy。

import matplotlib.pyplot as plt
import numpy as np

准备坐标

接下来,我们将为体素图准备坐标。我们将使用 NumPy 的 indices 函数创建一个 8x8x8 的点网格。

x, y, z = np.indices((8, 8, 8))

创建立方体和连接部分

现在,我们将创建两个立方体以及它们之间的连接部分。我们通过定义三个布尔数组来实现,这三个布尔数组将被组合成一个单一的布尔数组。前两个数组定义立方体的位置,而第三个数组定义连接部分的位置。

cube1 = (x < 3) & (y < 3) & (z < 3)
cube2 = (x >= 5) & (y >= 5) & (z >= 5)
link = abs(x - y) + abs(y - z) + abs(z - x) <= 2

voxelarray = cube1 | cube2 | link

设置颜色

现在我们将为体素图中的每个对象设置颜色。我们通过创建一个与在步骤 3 中创建的布尔数组形状相同的空数组来实现,然后根据每个对象的位置设置其颜色。

colors = np.empty(voxelarray.shape, dtype=object)
colors[link] = 'red'
colors[cube1] = 'blue'
colors[cube2] = 'green'

绘制体素数组

最后,我们可以使用 Axes3D.voxels 函数来绘制具有指定颜色的体素数组。

ax = plt.figure().add_subplot(projection='3d')
ax.voxels(voxelarray, facecolors=colors, edgecolor='k')

plt.show()

总结

在本实验中,我们学习了如何使用 Python 中的 Matplotlib 库创建三维体素图。我们为该图准备了坐标,创建立方体和连接部分,为每个对象设置颜色,并使用 Axes3D.voxels 函数绘制体素数组。体素图是可视化三维数据的一种有用方式,而 Matplotlib 使创建它们变得很容易。