Mlab: スクリプトインターフェース¶
mayavi.mlab モジュールは numpy array に適用するための簡潔なプロット機能を提供します。IPython を --gui=wx スイッチ付きで起動して試してみて下さい、
3D プロット関数¶
線¶
mlab.clf() # Clear the figure
t = np.linspace(0, 20, 200)
mlab.plot3d(np.sin(t), np.cos(t), 0.1*t, t)
立体表面¶
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')
任意の 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.func と mlab.mesh では連結は配列のレイアウトによって暗黙の内に与えられます. mlab.triangler_mesh も参照して下さい。
私達のデータはしばしば点と値だけではありません、いくつかの connectivity の情報を必要とします
体積データ¶
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)
この関数は正方格子で動作します 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>
装飾¶
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>
警告
** extent:** plotting オブジェクトに extent を指定した場合 mlab.outline と mlab.axes はデフォルトでそれらを取得しません
