关于numpy数组的3D可视化

通过`mlab`的一系列函数,可以对numpy进行数据可视化。

mlab`函数将numpy数组作为输入,描述数据的``x`, y, z 坐标,并以此构建成熟的可视化:如果有需要,它们可以完成data source数据源层级、filter滤波层级以及visualization module可视化模块层级的创建。与matplotlib的pylab类似,它们的创建过程可以通过关键字参数进行调整。此外,它们都可以返回创建的可视化模块对应的对象,因此可以通过修改它们的属性对可视化进行修改。

注解

这一节,我们仅列出不同的函数。对于每一个函数的具体用法请参考`mlab-reference`,在这份指南的最后,我们将附上图像和案例。

0D数据 和 1D数据

points3d 方法

points3d`方法 它将显示数据所给位置的图形(如点状,可以是其他形状),其位置信息由numpy数组给定,坐标由``x`, y, z 表示。

plot3d 方法

plot3d`方法将绘制线,数据``x`, y, z 坐标由1D的numpy数组给定,并且三个坐标的长度必须一致。

2D数据

imshow方法

imshow 可以将2D数组可视化成一张图像。

surf 方法

surf方法将2D数组平铺成一张毯子,并用z坐标表示高度。

contour_surf 方法

`contour_surf`将使用2D数组绘制等高线,并用一个坐标表示等高线的高度。

mesh 方法

mesh`方法用于绘制面绘制,由3个2D数组给定, ``x`, y, z 将坐标以网格形式绘出。与`surf`方法不同,2D数组``x``, y ,``z`` 所给定的网格连接方式不是默认给出的,它需要特别给定,因此能创建更复杂的网格连接形式。译者注:更多细节读者请阅读`Data representation in Mayavi`

barchart方法

`barchart`方法将对数组或者对一系列给定的坐标点进行可视化。例如,柱状图中,x,y,z表示坐标,s表示高度。该函数通用性较强,可以接受2D或3D数据,也可以接受点云。

triangular_mesh 方法

triangular_mesh 用于绘制三角形网格,其顶点由``x``, y,``z``坐标给定,坐标的维度为 (n, 3) 。

Vertical scale of surf() and contour_surf()

surf() and contour_surf() can be used as 3D representation of 2D data. By default the z-axis is supposed to be in the same units as the x and y axis, but it can be auto-scaled to give a 2/3 aspect ratio. This behavior can be controlled by specifying the “warp_scale=’auto’”.

从点到面:

仅仅知道数据的点的位置是不足以定义网格的,我们还需要知道点之间的连接方式。surfmesh,它们的连接方式隐含在所加载的数据里,即数据的组织方式决定了它们的网格连接方式,相邻的2D数组彼此之间最近的点相互连接。对于,triangular_mesh`其连接方式同样是隐含在数据中。比较常见的情形是,所要构建的连接方式并非正交网格。而面绘制的数据都基于网格,因此我们需要特别指定网格的组织形式。如果添加`delaunay2d filter滤波层级就会匹配相邻的点进行连接,并且进行插值。(请参考:example_surface_from_irregular_data) 译者注:如果采用pipeline管线搭建,delaunay2d`只是filter层级的一种,还有其他选择,比如`delaunay3d,它们的区别是,前者在“二维的平面最近”进行匹配的,而后者是“三维的空间最近”进行匹配。

3D数据

coutour3d方法

contour3d 方法用于绘制3D体数据的等值面。

quiver3d 方法

quiver3d 方法将为数据绘制箭头。x, y, z``为位置坐标,``u, v, ``w``为方向,均由numpy数组给定。 译者注:矢量可视化可采用quiver3d,需要传入6个参数,样式也可由参数传入,注意箭头大小和方向均由uvw控制。

flow 方法

flow方法用于绘制粒子的轨迹,它由三个3D数组给定。

slice 方法

volume_slice 方法用于绘制一个可交互的平面,它可以对体数据进行切片。 译者注:volume_slice 更多是一种可视化的辅助手段,如医学影像,体数据核磁等的可视化,生成一个可灵活控制的组织切面方便观察。

结构化与非结构化的数据

contour3d(), volume_slice() and flow() require ordered data (to be able to interpolate between the points), whereas quiver3d() works with any set of points. The required structure is detailed in the functions’ documentation.

注解

如果要对可视化有更多要求,丰富其细节则需要自己配置pipeline管线:从data sources数据源层级到filter滤波层级,再到module可视化模块层级进行逐层搭建。相关内容请参考下面的章节,controlling-the-pipeline-with-mlab-scripts`和`mlab-case-studies