# 12.1 Mayavi概述

### 12.1.1 初识Mayavi

Mayavi2（以后我们统称为Mayavi）是Mayavid的第二个版本。Mayavi是用于三维科学数据可视化的通用跨平台工具。Mayavi2致力于提供3D数据或3D绘图的简单和交互式可视化。它的主要特性包括:

* 对2维和3维标量、向量和张量数据进行可视化。
* 通过自定义源、模块和数据过滤器，易于扩展。
* 通过mlab进行快速绘图

Mayavi拥有强大的可扩展性能。Mayavi提供了一个自身可用的Mayavi应用程序。除此之外，Mayavi2也可以像matplotlib或gnuplotn那样作为绘图引擎在脚本中使用 ，以及在任何其他应用程序中用于交互式可视化的库。它也可以作为一个正视插件使用，允许它嵌入到其他基于正视的应用程序中。此外，Mayavi2力求成为一个可重用的工具，可以以不同的方式嵌入到库和应用程序中，或者与Envisage应用程序构建框架结合使用，以组装特定于领域的工具。

### 12.1.2 安装Mayavi

可以使用pip或者conda命令安装mayavi。但是，由于mayavi存在着重要的依赖关系，使得mayavi库的安装不像之前安装numpy，matplotlib等第三方库那样简单。其中两个最重要的依赖关系是：

* [VTK](https://www.vtk.org/)
* 用户图形交互接口（可以为[PyQt4](https://pypi.org/project/PyQt4/), [PySide](https://pypi.org/project/PySide), [PyQt5](https://pypi.org/project/PyQt5/) 或者wxPython） ，在这里我们选择PyQt5作为mayavi用户图形交互接口。

可以通过conda list或者pip list命令来查看当前环境中已经安装的包。如果环境中已经安装相关的依赖包，则可以在接下来的安装中忽略相关安装命令。

#### 使用pip安装

使用pip工具安装mayavi相对来说较为简单，只需要两行命令即可完成安装：

$ pip install mayavi

$ pip install PyQt5

#### 使用conda-forge安装

在安装mayavi之前，我们首先需要添加conda-forge通道：

￥ conda config --add channels conda-forge

有关conda-forge的介绍，请参阅第二章。

接着，进入指定环境后，安装Mayvi的依赖项：

$ conda install vtk

$ conda install pyqt=5

最后，安装mayavi

$ conda install mayavi

#### 测试mayavi安装

安装结束后，运行下列命令来测试mayavi是否被正常安装：

$ mayavi2

mayavi2是mayavi应用程序。mayavi2安装后，将会在conda环境scripts目录下自动创建mayavi2.exe应用程序。笔者的mayavi2应用程序位于C:\Users\Johan\Anaconda3\envs\iexkliu\Scripts\mayavi2.exe。可以双击mayavi2.exe来打开mayavi2应用程序。

### 12.1.3 Mayavi的用法

Mayavi主要有以下三种使用途径：

* 完全图形化地使用mayavi2应用程序。有关这方面的更多信息，请参阅第二章Mayavi应用程序部分。
* 使用Mayavi作为简单Python脚本(例如Ipython)和numpy的绘图引擎。mlab脚本API提供了在批处理脚本中使用Mayavi的简单方法，有关这方面的更多信息，请参见第三章mlab绘图。
* 用Python编写Mayavi应用程序的脚本。Mayavi应用程序本身具有一个功能强大的通用脚本API，可以使用它来适应您的需要。
  * 您可以在使用mayavi2应用程序时编写Mayavi脚本，以便自动化任务并扩展Mayavi的行为。
  * 您可以从自己的基于Python的应用程序中编写Mayavi脚本。
  * 您可以使用Envisage或其他方法以多种方式将Mayavi嵌入到应用程序中。

关于这一点的更多细节可以在Mayavi的高级脚本一章中找到。

### Mayavi嵌入Jupyter Lab

Mayavi库不像matplotlib和seaborn库那样可以在Jupyter Lab中开箱即用。要想在Jupyter Lab中开启对Mayavi支持， 必须得到图形后端的支持。使用不同后端将会得到不一样的输出，Mayavi可以使用“png”，“ipy”和“x3d“作为后端：

”png”后端是最简单的后端，它生成的图像可以嵌入到笔记本中。这些是静态的，而不是交互式的。

“ipy”后端（默认值）：”ipy”后端的行为几乎完全像一个普通的Mayavi UI窗口，并支持任何Mayavi/VTK可视化，完全是交互式的。这个后端依赖于VTK的屏幕外支持，取决于您的VTK是如何配置的，可能需要一个窗口系统。这个后端要求安装ipywidgets和ipyevents包：

conda install ipywidgets ipyevents

“x3d”后端：“x3d后端”在笔记本上显示x3d元素。X3D输出生成一个完全交互式的3D场景，但是，这将不支持VTK的交互式小部件。它也不支持透明和其他高级可视化。有关如何与X3D场景交互的信息，请参见:<http://www.x3dom.org/documentation/interaction/>

需要运行mlab.init\_notebook()语句来使用特定的后端：

from mayavi import mlab

mlab.init\_notebook('ipy')

另外，Mayavi附带了一些javascript文件，可以安装为:

jupyter nbextension install --py mayavi --user

这将在本地安装x3dom Javascript和CSS文件。注意，在运行上述操作之后，您不需要“启用”扩展或任何东西。、


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://johannesliu.gitbook.io/data-science-python-implemented/12.0-foundation_mayavi/12.1-introduction_to_mayavi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
