Python MayaVi 模块

2025年03月17日 | 阅读 9 分钟

我们都可能听说过图形用户界面,即 GUI,并且我们一定在许多应用程序不断变化的界面中看到了它的影响。基本上,GUI 或图形用户界面是一种应用程序和软件的用户界面,它不像基于文本的用户界面和类型化的命令标签那样,允许用户通过音频指示器和图形图标(如符号等)与计算机、智能手机、PC 等进行交互。GUI 以一种方式显示对象和数据,通过其提供的交互式用户界面,我们试图显示的信息可以非常容易地传达。每当用户与应用程序交互时,电子设备上显示的对象会改变其颜色、文本,有时甚至形状。因此,它使用户与电子设备或应用程序的交互变得更加互动和有趣。

我们可以看到 GUI 在当今世界变得多么重要,我们几乎在我们日常生活中使用的每个应用程序中都能找到它的用途。因此,了解如何构建 GUI 并使用它变得更加重要。大多数编程语言都为我们提供了借助其内置库或相关扩展创建交互式 GUI 的选项。但 Python 是所有这些编程语言中最受欢迎的选择之一,因为它提供了多个库,通过这些库我们可以轻松创建 GUI。在 Python 中,我们有许多内置模块和一些可安装模块,我们可以使用这些模块的功能在程序中创建交互式 GUI。其中一个 Python 模块是 MayaVi 模块,我们将在本教程中学习它。我们将在本教程中了解 MayaVi 教程、如何安装它、它的功能以及更多信息。

Python 中的 MayaVi 模块

MayaVi 是一个用于可视化科学数据的 Python 模块,它使用 VTK 来可视化数据。除此之外,MayaVi 模块还提供了借助 Tkinter 库开发 GUI 的选项。MayaVi 模块目前是免费的,并根据 BSD 许可证分发,由 Prabhu Ramchandran 开发,它被发音为一个单词,“Ma-ya-vee”,在英语中意为“神奇”。MayaVi 是一个跨平台的 Python 模块(几乎可以在所有平台,如 UNIX、Windows 或 Mac OS X 上运行),它几乎可以在所有同时提供 VTK 和 Python 的平台或操作系统上运行。MayaVi 模块的最新版本 MayaVi2 与原始版本有很大不同,因为最新版本是 Enthought 套件的一部分,这是一个用于科学 Python 程序的套件。使 MayaVi 模块的最新版本与原始版本不同的另一个原因是,它通过 Python 程序提供了可重用的 3D 绘图组件,而不仅仅关注交互式程序(这是以前版本中缺少的功能)。尽管 MayaVi 模块的最新版本与以前版本相比界面和 API 略有不同,但它具有许多以前版本中缺少的新功能。

Python 中的 MayaVi 模块:愿景

MayaVi 模块在开发时,其愿景是提供科学和其他数据的交互式可视化,但这并不是开发 MayaVi 模块的唯一目的。开发 MayaVi 模块背后还有其他一些愿景,我们将在本节中探讨所有这些愿景。

以下是构建 Python MayaVi 模块的愿景

  • 需要一个可重用工具,我们可以将其嵌入到我们的应用程序中,用于多个数据的 3D 绘图。
  • MayaVi 还致力于提供科学及其他数据和多个应用程序的交互式且简单的可视化。
  • 利用 VTK 库的强大功能,而无需我们被迫学习它。
  • MayaVi 的开发还旨在提供一个丰富的用户界面(主要侧重于 GUI),其中包含对话框,通过可视化所有对象和数据来与其交互。
  • MayaVi 与设想的应用程序构建框架相结合,以便我们可以将所有特定领域的工具集中在一个地方。
  • 除此之外,Python 中对简洁简单的脚本接口的需求,包括面向对象编程、a-la mlab 和单行接口,促成了 MayaVi 模块的开发。

这些是开发 MayaVi 模块的主要原因,或者我们可以将其视为愿景。

Python 中的 MayaVi 模块:一般特性和功能

正如我们在 MayaVi 模块的介绍部分所看到的,这个模块为我们提供了多种函数,可以非常容易地可视化科学数据。但这并不是 MayaVi 模块的唯一特性,使其在所有科学数据可视化模块中脱颖而出。它还具有其他一些特性,使该模块在短时间内非常受欢迎,我们将在本节中讨论该模块的这些特性和功能。以下是 MayaVi 模块的一般特性和突出功能:

  • MayaVi 模块是通过 mlab(也可通过 MayaVi 扩展获得)进行科学绘图和数据可视化的一个非常方便的选择。
  • MayaVi 模块在读取多种文件格式(如 PLOT3D、VTK(XML 和传统)等)方面非常有用。
  • MayaVi 模块是一个跨平台的 Python 模块,我们可以轻松地在多种操作系统(OS)中使用这些模块。
  • 使用 Python 对 mayavi 模块进行脚本编写非常容易。
  • MayaVi 模块可以将渲染的数据可视化保存为多种图像格式,方便用户使用。
  • 我们可以从 Python 解释器中编写 Mayavi 模块的脚本,或将其作为 Python 模块导入到程序中。
  • 它提供并作为一个管道浏览器工作,通过它可以浏览和编辑 VTK 管道中存在的对象。
  • MayaVi 模块的可扩展性非常简单和容易,这意味着我们可以通过各种自定义源、文件格式、数据过滤器和模块来扩展 MayaVi 模块。
  • 使用 Mayavi 模块,张量(2D 和 3D)、矢量或标量数据的可视化是可能且非常容易的。
  • 使用 Mayavi 模块,我们可以导入简单的 3D studio 和 VRML 场景。

这些是 MayaVi 模块的一些一般特性和突出功能,当我们浏览这个列表时,我们会发现为什么这个 MayaVi 模块在短时间内如此受欢迎。除了上面列出的功能之外,MayaVi 模块还可以作为任何应用程序和数据(通过其最新发布的 Mayavi2)的可视化引擎。

Python 中的 MayaVi 模块:功能

MayaVi 库用于执行多种功能,例如科学数据可视化、开发图形用户界面、开发 2D 和 3D 图形等,通过在 Python 程序中导入此模块。我们可以借助 MayaVi 模块或在程序中同时使用 Mayavi 和其他一些模块来执行所有这些功能,但对于本教程,我们只会学习使用 MayaVi 模块构建图形用户界面。我们将使用 MayaVi 模块和其他一些模块(稍后讨论)通过 Python 程序构建 GUI。

Python 中的 MayaVi 模块:安装

MayaVi 不是 Python 的内置模块,不随 Python 扩展预安装,因此,如果要在 Python 程序中使用和导入此模块,我们必须在系统中安装它。MayaVi 模块的安装非常简单,可以通过多种方法完成,包括通过 conda 方法、通过 Jupyter Notebook 方法、通过 pip 方法等等。但在本教程中,我们将仅使用 pip 安装器方法执行 MayaVi 模块的安装,并使用终端 shell 中的以下 pip 命令安装此模块:

我们必须打开系统的命令提示符终端,并在其中写入上述命令,然后按回车键开始 MayaVi 模块的安装过程。当我们按下回车键时,MayaVi 模块的安装过程将开始,并且需要一段时间才能在我们的系统中成功安装 MayaVi 模块。因为 Mayavi 模块带有多个扩展和库函数,它们将随之下载并安装到我们的系统中,并且 pip 也会为其构建一个 wheel。

Python MayaVi Module

如我们所见,MayaVi 模块已成功安装在我们的系统中,现在我们可以通过将其导入 Python 程序来开始使用此模块。

注意:由于我们要在本教程中使用 MayaVi 模块构建 GUI,我们还需要 NumPy 和 SciPy 模块来执行此实现。在进一步进行 MayaVi 模块的实现部分之前,我们应该确保 SciPy 和 NumPy 模块都已安装在我们的系统中。如果 SciPy 和 NumPy 模块不存在于我们的系统中,我们可以在命令提示符终端中使用以下 pip 安装程序命令将它们安装到我们的系统中:

(i) SciPy 模块的安装


Python MayaVi Module

此模块已存在于我们的系统中,这就是为什么它在这里显示要求已满足,如果此模块不存在于系统中,此命令将安装它。

(ii) NumPy 模块的安装


Python MayaVi Module

此模块已存在于我们的系统中,这就是为什么它在这里显示要求已满足。

我们已经安装了 MayaVi 模块实现部分所需的所有模块,因此现在我们可以继续进行实现部分。

Python 中的 MayaVi 模块:实现

在实现部分,我们将只使用 MayaVi 模块来实现其 GUI 构建功能,并通过它构建球面谐波函数的可视化。我们将在一个示例程序中使用 MayaVi 模块,通过在输出中为其绘制图形用户界面来理解球面谐波函数的可视化。我们还将使用 SciPy 和 NumPy 模块进行科学计算和在程序中使用三角函数。我们可以查看以下示例程序,了解 MayaVi 模块与 NumPy 和 SciPy 模块的实现。

示例

查看以下具有球面谐波函数可视化的 Python 程序

输出

Python MayaVi Module

如我们所见,球面谐波的可视化已在输出中以指定的尺寸、值和特征绘制出来。

说明

我们首先在程序中导入了 scipy、numpy 和 mayavi 模块。首先,我们从 numpy 模块中导入了 linspace、meshgrid、array、sin、cos、pi 和 abs 函数,然后我们从 scipy 模块中导入了 sph_harm 函数并将其重命名为 sh,最后,我们从 mayavi 模块中导入了 mlab 并将其重命名为 ml,用于可视化球面谐波运动。

之后,我们使用 linspace() 函数在 OneDTheta 和 OneDPhi 变量中定义了 1D 角度。之后,我们使用 meshgrid() 函数中的 OneDTheta 和 OneDPhi 角度定义了 2D 角度,并初始化了 TwoDTheta 和 TwoDPhi 变量。

之后,我们定义了一个数组,并在数组内部使用了 sin 和 cos 恒等式以及我们之前定义的 2D 角度。接下来,我们使用整数值定义了 length 和 measurement 变量,然后我们在 sph_harm() 函数内部使用了 2D 角度、length 和 measurement 值。

之后,我们初始化了 radius 变量,使用 abs() 函数定义球体的半径。接下来,我们使用 figure() 函数定义图形的尺寸,之后,我们使用 mesh() 函数指定输出中绘制的图形的半径和颜色。

然后,我们使用 view() 函数设置球面谐波的可视化,并使用 savefig() 将图形保存为指定格式。最后,我们使用 show() 函数在输出中显示可视化。