Mlab: スクリプトインターフェース

mayavi.mlab モジュールは numpy array に適用するための簡潔なプロット機能を提供します。IPython を --gui=wx スイッチ付きで起動して試してみて下さい、

3D プロット関数

../../_images/points3d.png

x, y, z, value = np.random.random((4, 40))
mlab.points3d(x, y, z, value)

../../_images/plot3d.png

mlab.clf()  # Clear the figure
t = np.linspace(0, 20, 200)
mlab.plot3d(np.sin(t), np.cos(t), 0.1*t, t)

../../_images/surf.png

立体表面

mlab.clf()
x, y = np.mgrid[-10:10:100j, -10:10:100j]
r = np.sqrt(x**2 + y**2)
z = np.sin(r)/r
mlab.surf(z, warp_scale='auto')

../../_images/mesh.png

任意の regular mesh

mlab.clf()
phi, theta = np.mgrid[0:np.pi:11j, 0:2*np.pi:11j]
x = np.sin(phi) * np.cos(theta)
y = np.sin(phi) * np.sin(theta)
z = np.cos(phi)
mlab.mesh(x, y, z)
mlab.mesh(x, y, z, representation='wireframe', color=(0, 0, 0))

注釈

表面は三角形や多角形を形成するために 連結された 点で定義されます. mlab.funcmlab.mesh では連結は配列のレイアウトによって暗黙の内に与えられます. mlab.triangler_mesh も参照して下さい。

私達のデータはしばしば点と値だけではありません、いくつかの connectivity の情報を必要とします

../../_images/contour3d.png

体積データ

mlab.clf()
x, y, z = np.mgrid[-5:5:64j, -5:5:64j, -5:5:64j]
values = x*x*0.5 + y*y + z*z*2.0
mlab.contour3d(values)
../../_images/viz_volume_structure1.png

この関数は正方格子で動作します value 配列は3次元配列で格子の形状を与えます。

図と装飾

図の管理

現在の図を取得:

mlab.gcf()

現在の図を消去する:

mlab.clf()

現在の図を設定する:

mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0.5, 0.5, 0.5)

図を画像ファイルに保存する:

mlab.savefig(‘foo.png’, size=(300, 300))

視点を変更する

mlab.view(azimuth=45, elevation=54, distance=1.)

作図のプロパティを変更する

docstring の例: mlab.mesh

2次元配列として与えられた、格子状に並んだデータを表面として作図しましょう.

関数の特徴:

mesh(x, y, z, ...)

x, y, z は2次元配列で全て同じシェイプで表面の頂点を与えます. これらの点の連結は配列上での連結を意味します.

単純な構造(直交格子のような)は surf 関数を使うとよいでしょう、surf 関数はより効率的なデータ構造を作成します。

キーワード引数:

color:

vtk オブジェクトの色。与えられた場合、カラーマップを上書きします。この引数が0から1までの範囲の浮動小数点数の3つ組みで与えます、例 白として (1,1,1) を与える。

colormap:

使うカラーマップのタイプ

extent:

[xmin, xmax, ymin, ymax, zmin, zmax] デフォルトでは x, y, x の配列の範囲です. 作成されるオブジェクトの範囲を変更したいときに利用します.

figure:

移植したい図.

line_width:

線の太さ. 浮動小数点数でなければいけません. デフォルト: 2.0

mask:

データの点を減らすためのブーリアン値のマスク配列.

mask_points:

与えられた場合 ‘mask_points’ 外のデータ点だけが表示されます. このオプションは整数か None からなる巨大なデータセットで表示する点を減らすのに便利です.

mode:

グリフ glyph のモード. ‘2darrow’, ‘2dcircle’, ‘2dcross’, ‘2ddash’, ‘2ddiamond’, ‘2dhooked_arrow’, ‘2dsquare’, ‘2dthick_arrow’, ‘2dthick_cross’ or ‘2dtriangle’, ‘2dvertex’, ‘arrow’, ‘cone’, ‘cube’ or ‘cylinder’, ‘point’, ‘sphere’ のどれかでなければいけません. デフォルト: sphere

name:

作成される vtk オブジェクトの名前.

representation:

表面の表示のタイブ. ‘surface’, ‘wireframe’, ‘points’, ‘mesh’ or ‘fancymesh’ のどれかでなければいけません. デフォルト: surface

resolution:

作成されるグリフ glyph の解像度例えば sphere に対しては theta と phi の分割数です. 整数でなければいけません. デフォルト: 8

scalars:

オプションとして与えることができるスカラーデータ.

scale_factor:

fancy_mesh モードでの頂点を表す glyph の縮尺係数. 浮動小数点数でなければいけません. デフォルト: 0.05

scale_mode:

グリフ glyph の縮尺モード (‘vector’, ‘scalar’, または ‘none’).

transparent:

数値に応じて actor の透明度を設定します.

tube_radius:

mesh モードでの線を表わすためのチューブの半径. None の場合には, 単純な線が使われます.

tube_sides:

線を表わすためのチューブの側面の数. 浮動小数点数でなければいけません. デフォルト: 6

vmax:

vmax はカラーマップの目盛に使われます. None の場合, データの最大値が使われます

vmin:

vmin はカラーマップの目盛に使われます. None の場合, データの最小値が使われます

例:

In [1]: import numpy as np
In [2]: r, theta = np.mgrid[0:10, -np.pi:np.pi:10j]
In [3]: x = r*np.cos(theta)
In [4]: y = r*np.sin(theta)
In [5]: z = np.sin(r)/r
In [6]: from enthought.mayavi import mlab
In [7]: mlab.mesh(x, y, z, colormap='gist_earth', extent=[0, 1, 0, 1, 0, 1])
Out[7]: <enthought.mayavi.modules.surface.Surface object at 0xde6f08c>
In [8]: mlab.mesh(x, y, z, extent=[0, 1, 0, 1, 0, 1],
...: representation='wireframe', line_width=1, color=(0.5, 0.5, 0.5))
Out[8]: <enthought.mayavi.modules.surface.Surface object at 0xdd6a71c>
../../_images/polar_mesh.png

装飾

In [9]: mlab.colorbar(Out[7], orientation='vertical')
Out[9]: <tvtk_classes.scalar_bar_actor.ScalarBarActor object at 0xd897f8c>
In [10]: mlab.title('polar mesh')
Out[10]: <enthought.mayavi.modules.text.Text object at 0xd8ed38c>
In [11]: mlab.outline(Out[7])
Out[11]: <enthought.mayavi.modules.outline.Outline object at 0xdd21b6c>
In [12]: mlab.axes(Out[7])
Out[12]: <enthought.mayavi.modules.axes.Axes object at 0xd2e4bcc>
../../_images/decorations1.png

警告

** extent:** plotting オブジェクトに extent を指定した場合 mlab.outlinemlab.axes はデフォルトでそれらを取得しません