mlabスクリプトの実行

Mlabは他のMayavi同様,インタラクティブなアプリケーションです.インタラクティブ環境(次の段落を参照)に入っていない場合は, show() 関数を使用して,図形やその他の図形要素を操作する必要があります.例えば,スクリプトを作成している場合,1つまたは複数の図形を表示し,ユーザがそれらを操作できるようにするには,その都度 show() を呼び出す必要があります.

対話的にmlabを使用する

IPython_ を使用すると, mlab 命令をインタラクティブに実行できます.また, IPython_'s %run コマンドを使用してスクリプト内で実行することもできます.

In [1]: %run my_script

--gui=qt オプションを指定して IPython_ を起動する必要があります.この環境では,プロットコマンドはインタラクティブです.これらのコマンドは図形に即座に影響を与え, show() 関数を使用する必要性を軽減します.

mlabは,mayavi2アプリケーションのPythonシェル,またはwxPythonベースのアプリケーション(他のEnvisageベースのアプリケーションやSPEなど,Stani氏のPython Editor)の任意のインタラクティブPythonシェルで,インタラクティブに使用することもできます.

Matplotlibと一緒に使用する

IPythonでMatplotlibの対話型プロットをMayaviのmlabで使用する場合は,次の操作を実行します.

  • 次のコマンドでIPythonを起動します.

    $ ipython --matplotlib=qt
    
  • もしくは, --gui=qt オプションを指定してIPythonを起動します.

    $ ipython --gui=qt
    

    およびmatplotlibモジュールをインポートする に,次のPythonコマンドを入力します.

    >>> import matplotlib
    >>> matplotlib.use('Qt4Agg')
    >>> matplotlib.interactive(True)
    
  • 以下のようにIPythonに対して --pylab オプションを使うこともできます.

    $ ipython --pylab=qt
    

デフォルトでIPythonでmatplotlibとmlabを一緒に動作させるには,デフォルトのmatplotlibバックエンドを変更します. ~/matplotlib/matplotlibrc に次の行を追加します.

backend     : Qt4Agg

何らかの理由でQtバックエンドが動作しない場合は,wxバックエンドを使用します.これを行うには,次の操作を行います.

$ ETS_TOOLKIT=wx
$ ipython --gui=wx

Mayaviに関する限り, ETS_TOOLKIT 環境変数を使用して適切なツールキットを選択します.これが設定されていない場合,サポートされているツールキットは,成功するまでバージョン依存の順序で試行されます. traitsui の最近のリリースでは,デフォルトはQtです. ETS_TOOLKIT のオプションは以下のとおりです.

  • qt4: Qtバックエンドを使う場合(PySideまたはPyQt4),

  • wx: wxPythonを使うには

  • null:UI ツールキットを使用しない.

スクリプト内

mlabコマンドをファイルに書き込み,スクリプトを作成することができます.このスクリプトをMayaviアプリケーションにロードするには, File->Open file メニューエントリを使用し, File->Refresh code メニューエントリを使用するか,または Control-r キーを押します.また, -x コマンドラインスイッチを使用して,Mayaviアプリケーションの起動中に実行することもできます.

前述したように,インタラクティブ環境の外で実行する場合は,たとえば python myscript.py を使用します.スクリプトを一時停止し,ユーザが図を操作できるようにするには, show() 関数(上のデモに示されているように)を呼び出す必要があります.

次のように show() を使用して関数を修飾し,event-loopで実行させることもできます.これにより,柔軟性が増します.

from mayavi import mlab
from numpy import random

@mlab.show
def image():
   mlab.imshow(random.random((10, 10)))

このデコレータにより, image 関数が呼び出されるたびに, mlab は, image 関数を実行する前に対話環境が実行されていることを確認します.対話型環境が実行されていない場合は, mlab が起動し,イメージ関数は閉じられるまで戻りません.