Mayavi概述

介绍

Mayavi2 旨在提供一个简单、可交互的3D数据或3D绘图的可视化。其做法如下:

  • (可选)一个丰富的用户界面,可以和数据、对象进行交互。

  • 简洁清晰的Python接口,以及可以使用类似于matlab和matplotlib的3D可视化函数(参考:ref:mlab <simple-scripting-with-mlab>),或者面向对象的交互界面。

  • 其底层封装VTK,但是学习它并不是必须的。

此外,Mayavi2是一个可复用的工具箱,您可以用不同的方法整合到您的库或者应用中,结合Envisage应用程序框架组装成特定领域的工具。

Mayavi2是什么?

Mayavi2是一个通用、跨平台的3D可视化工具。它具有以下特点:

  • 2D以及3D的标量, 向量以及张量可视化。

  • 简单的Python脚本。

  • 简易的扩展性——通过自定义数据源sources,模块modules以及滤波filters。

  • Reading several file formats: VTK (legacy and XML), PLOT3D, etc.

  • 可视化的存储

  • 用不同的图像格式存储渲染的可视化结果。

  • 通过mlab类可以方便快捷地进行的数据可视化。(详见:参考部分simple-scripting-with-mlab)

与其前身Mayavi1不同,Mayavi2的设计在一开始就考虑了脚本化和可扩展性。Mayavi2提供了直接可用的“mayavi2”应用程序。而它也可以像matplotlib和gnuplot一样作为绘图引擎,或者作为一个交互的可视化库。同样,它也可以作为一个Envisage插件整合到其他的Envisage基础的应用。

技术细节

与VTK相似,Mayavi2基于管线结构,并提供通用的可视化引擎。它也为2D/3D数据可视化提供 Envisage 内置插件。Mayavi2 使用Enthought工具套件(ETS),在Traits下封装TVTK和Envisage。以下是它们的特点:

  • Python化的API将使Traits得以善用。

  • Mayavi与numpy的数组良好兼容。(这要归功于底层封装的TVTK。)

  • Mayavi2得益于更加清晰的MVC设计模式,相比于Mayavi-1 更加方便编写脚本。

  • Easy to extend with added sources, components, modules and data filters.

  • 提供一个内置的 Envisage 插件,这意味着:

    • 在Mayavi中将更加轻松使用其他的Envisage插件。比如,Mayavi提供一个内置的Python shell。这就是一个内置的插件,需要一行代码引入Mayavi.

    • 基于Envisage的应用,Mayavi将非常容易使用。因此,任何Envisage的应用都能方便地使用Mayavi的内置插件并且使用它进行可视化数据。

  • 它使用wxPython/Qt4的GUI(得益于Traits,PyFace和Envisage)。注意,在Mayavi中不会直接使用wxPython/Qt4的代码。

  • A non-intrusive reusable design. It is possible to use Mayavi without a wxPython or Qt4 based UI.

备注

假定你已经有一个可以正常工作的Mayavi,以下的章节将为此展开。对于下载和安装Mayavi,请参考下一章节。

将Mayavi视为一个app应用,还是一个库?

使用Mayavi的三种基本方式:

  1. “mayavi2”应用界面是一个图形化界面。更对信息请参考:ref:using-the-mayavi-application

  2. 辅以简单的Python脚本,如用Ipython结合numpy,我们就可以使用Mayavi绘图引擎。“mlab”API提供一个简单的方式来批处理脚本。更多信参考:ref:simple-scripting-with-mlab .

  3. 您可以用Python来编写Mayavi脚本。Mayavi具有很强大的功能,其通用性的API可以适应您的需求。

    1. 在使用mayavi2应用程序的同时,您可以编写Mayavi脚本,从而将您的任务自动化,扩展Mayavi的功能。

    2. 基于Python应用,您可以自行编写Mayavi脚本。

    3. 无论是使用Envisage还是其他手段,您可以把Mayavi集合到自己的应用中。

    更多的细节请参考该章节:ref:advanced-scripting-with-mayavi .

所谓的pipeline管线模式,组成方式:场景Scenes,数据源data sources,可视化模块visualization modules。

Mayavi使用和VTK相同的管线结构。以用户角度来看,可把其视为一个层级结构。

  • 数据加载进Mayavi之后存储在数据源** data source **中(也可以使用文件读取或者从脚本进行创建)。数据对象和文件的数量不受限制。数据源Data sources是一个丰富的对象,它用来对数据进行存储,而不是对它进行可视化。

  • 数据的处理是一个可选项,它通过`filters 滤波器`对数据进行操作,并使用`modules 模块`进行可视化。通过管线UI界面的`Visualize 可视化`菜单或者管线配置菜单,可以进入 filters 滤波 和 module模块。它们也可以直接作为Python的对象初始化。

    The reasons for separation between data source, the data container, and the visualizations tools used to look at it, the modules, is that there are many different ways of looking at the same data. For instance the following images are all made by applying different modules to the same data source:

    volumetric_cut_plane volumetric_contour3d volumetric_volume_tweaked

  • 所有的对象都从属与`Scene`层级,这是3D可视化结果的区域。在交互式应用中,新的`Scene`可以用以下方式创建:File->New->VTK Scene

将数据加载进Mayavi

Mayavi是一个数据可视化工具。一般有两种方式将你的数据加载进去。

  1. Store your data in a supported file format like VTK legacy or VTK XML files etc. See VTK file formats for more information on the VTK formats. These files can be loaded in the interactive application using the menus.

  2. 通过numpy数组或其他序列可以生成一个TVTK数据集。通过使用脚本,比如`mlab`,这是最容易实现的。(参考:creating data sources with mlab 1<mlab_data_source>,或者使用3D绘图函数,参考`mlab_plotting_functions`)

对于创建VTK数据结构或文件,如果你想获得更深的理解,关于其数据集更多的信息请参考:data-structures-used-by-mayavi 章节。