Matplotlib 3D 可视化入门

17 Mar 2025 | 4 分钟阅读

当涉及到以更自然的方式分析和提供复杂数据以及研究具有许多维度的数据集时,三维模型是一个了不起的工具。Matplotlib,一个流行的 Python 图表包,有一个 mpl_toolkits.Mplot3d 模块,它为三维绘图提供了强大的支持。此模块通过允许开发三维绘图,例如散点图、曲面图和线框图,使确定数据分配、链接和实例变得更加简单,这些在各个方面都难以理解。

由于 Jupyter Notebook 是一个交互式笔记本,这些功能得到了特别的增强。通过在杂志中直接集成 3D 图,客户能够调整视点、平移和缩放,并且通常从多个角度探索记录。这种智能对于全面的数据分析至关重要,提供了一种处理数据集复杂性的复杂方法。

本教程将带您了解在 Jupyter 笔记本中配置现有情况、生成测试数据和开发基本 Matplotlib 3D 图形的最著名策略。我们还将研究如何使用 ipywidgets 等包使这些图具有交互性,从而增强您的分析能力并提供更具动态性和洞察力的可视化。

引入所需的库

1. NumPy: NumPy 是一个用于数值计算的强大 Python 包。支持大型多维数组和矩阵,并且可以在这些数组上执行许多数学运算。

2. Matplotlib: Matplotlib 是一个用于静态、动画和交互式图形的完整 Python 可视化工具包。具体来说,我们将利用 mpl_toolkits.mplot3d 模块进行 3D 图表绘制。

pyplot:一个 Matplotlib 包,它提供类似于 MATLAB 的绘图界面。

一个名为 Axes3D 的模块可以创建 3D 图。

3. ipywidgets: 一个名为 ipywidgets 的包提供了与 Jupyter Notebook 程序一起使用的动态小部件。您可以使用滑块、按钮和其他交互式功能自定义您的笔记本。

4. 在 Python 笔记本上设置 Matplotlib: 为了保证在 Jupyter Notebook 中准确的绘图呈现,您必须使用下一个魔术命令设置 Matplotlib

制作一个简单的 Matplotlib 3D 图

使用 mpl_toolkits.mplot3d 中的 Axes3D 模块生成绘图并收集示例数据是使用 Matplotlib 创建简单 3D 图所涉及的步骤。使用 Jupyter 制作的笔记本制作基本的三维散点图的步骤如下

  • 创建一个示例数据集
    为了绘图,我们必须首先生成一些示例数据。在这种情况下,数据的 x、y 和 z 坐标将由三个随机整数数组表示。
  • 制作一个三维图
    为了构建 3D 散点图,我们将使用 Matplotlib 中的 Axes3D 类。为此,必须制作一个图形,并向其添加一个 3D 子图。
  • 绘制信息
    最后,我们将使用 3D 轴对象的散点函数来描绘生成的数据。

相应的代码

预期结果

  • 考虑生成 100 个随机数据
  • 代码将生成一个包含 100 个随机选择的数据点的 3D 散点图。
  • Jupyter Notebook 本身具有一个交互式绘图窗口。
  • 使用鼠标,您可以从各个角度检查数据,放大或缩小,并旋转绘图。
  • x、y、z 轴的标签将是合适的。

理由

  • 数据创建: 使用 x、y 和 z 坐标,我们使用 NumPy 创建了三个随机整数数组。设置种子时可保证可重现的结果。
  • 3D 子图和图形: 我们制作了一个新图形,并使用 fig.add_subplot(111, projection='3d') 将一个 3D 子图添加到其中。
  • 散点图: 为了制作散点图,我们使用 Axes3D 对象的散点函数。使用 c 和 marker 等参数设置信息点颜色和形状。
  • 标签: 使用 set_xlabel、set_ylabel 和 set_zlabel 函数标记轴。
  • 绘图以显示: 最后,通过调用 plt.show() 来显示绘图。

开发交互式 3D 绘图控件

  • 建立一个用于绘图更新的函数: 首先,编写一个根据提供的参数修改绘图的函数。每次用户与其中一个小部件交互时,都会调用此方法。
  • 制作交互式显示: 您可以通过使用 ipywidgets 包构建交互式小部件,如按钮、下拉菜单和滑块。用户将能够通过这些小部件动态更改绘图的设置。
  • 将小部件连接到绘图功能: 使用 ipywidgets 中的交互或交互功能,将这些交互式小部件与绘图功能连接起来。这将保证绘图更新是由小部件值的变化触发的。
  • 显示绘图和小部件: 最后,打开 Jupyter Notebook 并查看 3D 绘图和交互式小部件。

示例

输出

Introduction to 3D Visualization with Matplotlib