Python
Mayavi

Python 3.6, Anaconda, Spyder使いに捧げるMayavi用の仮想環境構築

Python 3.6, Anaconda (Python 3.x), Spyderの環境下で、3D描画に特化したライブラリMayaviを導入する方法。

Mayaviは旧バージョンであるPyQt4を要求し、これと整合性を保つため(?)にもPython2.7の仮想環境を構築するのが手っ取り早いようです。

conda create -n py27mayavi python=2.7 pyqt=4 mayavi vtk spyder

ここではmayaviに必要な最低限のライブラリのみ記載しています。その他、必要なライブラリも適宜追加してください。

仮想環境構築に際するチャンネルの問題

その後Mayavi用のSpyderが起動しないトラブルに見舞われましたが、チャンネルをconda-forgeからAnacondaに変更することで何故か解決しました。以下に成功した仮想環境設定を書いておきます。

conda create -n maya27 python=2.7 anaconda spyder mayavi pyqt=4 qt=4 vtk=6 matplotlib=1 --override-channels --channel anaconda

最後の-override-channels --channel anacondaがミソのようです[1]。
matplotlibのver=1はPyQtとの整合性を保つため(多分)、vtkのverは指定しなくていいかも。

この仮想環境にライブラリを追加するときも-override-channels --channel anacondaを忘れずに(もはや優先チャンネルをconda-forgeからAnacondaに設定し直したほうが早いかも。。)。

また、基本的に「動けばいいや」というスタンスなので原因については調べておりません。どうぞご容赦ください。。
【ここまで追記 (2018.07.18)】

軸の表示に関するトラブルの解決

軸の目盛りを設定しようとすると何故かエラーが発生、カーネルがお亡くなりになられます。これはどうもmayaviのver4.5.0以降のバグのようです[2]。解決策は以下の通り。

Step 1
"(Anacondaフォルダパス)/envs/(仮想環境名)/Lib/site-packages/mayavi" に移動

Step 2
"modules" フォルダ内 "axes.py" の173行目

self.configure_input_data(self.axes, src.outputs[0])

data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
self.configure_input_data(self.axes, data)

へと変更。

Step 3
"tools" フォルダ内 "decorations.py" の372行目

axes.axes.ranges = axes.module_manager.source.outputs[0].bounds

src = axes.module_manager.source
data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
axes.axes.ranges = data.bounds

へと変更。

ただ参考サイト[2]の最後のほうを訳しただけですが・・。当方の環境ではこのやり方で解決し、今のところ順調に動いております。設定はなかなか面倒ですが、やはりMayaviで描く3Dプロットは美しいですね。
【ここまで追記2 (2018.07.18)】

【参考にしたサイト】

[1] https://conda.io/docs/commands/conda-create.html
[2] https://github.com/enthought/mayavi/issues/474