Pyvista の Export scene as HTML 機能を使うと、可視化した 3D データをほかの人に見せやすいので、簡単に紹介します。
以下のデモのテスト環境
-
WIndows 11
-
Pyvista 0.42.3
-
Jupyterlab 4.0.2
-
ipywidgets 8.1.1
-
trame 3.3.0
概要
Jupyter lab
内で Pyvista 0.42.3
を使って、Plotter
による 3D 可視化を行ったとき、ツールバーの右端に、 ”Export scene as HTML” というボタンがあります。(ドキュメントを見たところ 0.40 以降では存在していると推測します。)
この機能を使って生成した HTML をブラウザで開くと、 vtk.js を使って 3D オブジェクトを表示します。マウス操作で回転と拡大縮小ができるので、解析結果の可視化を人に渡して見せるのに使えます。つまり paraview や Python をインストールしていない人にも、3D のままのデータを見せることが簡単にできます。
Pyvista の example を使って作ったものをご覧ください。(リンク先 GitHub pages の html ファイルは、マウス操作可能です)
このファイルを作るためのコード
Pyvista の使い方がわかっていれば、HTML ファイル生成は、メニュー操作だけです。
以下のコードを Jupyter lab の中で実行します。
import numpy as np
import pyvista as pv
from pyvista import examples
#%%
grid = examples.load_hydrogen_orbital(3, 2, 0)
#%%
eval_at = grid['real_wf'].max() * 0.1
contours = grid.contour(
[eval_at],
scalars=np.abs(grid['real_wf']),
method='marching_cubes',
)
contours = contours.interpolate(grid)
contours.plot(
smooth_shading=True,
show_scalar_bar=False,
)
Jupyter lab 内に表示された図の上のメニューバーから、Export scene as HTML
を選ぶと、html 形式のファイルを保存できます。
examples.load_hydrogen_orbital
の機能については、help で確認してください。
help(examples.load_hydrogen_orbital)
以上です。
追記 2024/4/19
コードからもこの 3D scene を生成できます
-
pyvista.plotter.export_html
を呼び出します。
リンク先ドキュメントの例示コード:
import pyvista as pv
from pyvista import examples
mesh = examples.load_uniform()
pl = pv.Plotter(shape=(1, 2))
_ = pl.add_mesh(
mesh, scalars='Spatial Point Data', show_edges=True
)
pl.subplot(0, 1)
_ = pl.add_mesh(
mesh, scalars='Spatial Cell Data', show_edges=True
)
pl.export_html('pv.html')
linux の場合
以下の2つの方法のいずれかで、Display がない環境 (ターミナル接続、リモートデスクトップ接続) でも export_html 機能を利用できます。
- xvfb がインストールされていること(X11 の機能なので、たぶんインストールに管理者権限が必要)
- vtk ライブラリーの代わりに vtk-osmesa を利用する。1
この場合、ターミナル接続で pl.show()
を呼ぶとハングします。
Jupyter lab 内では OK に見えますが、この動作確認部分は Windows 環境での仮のチェック結果です。
pip install pyvista[all,trame]
pip uninstall vtk -y
pip install --extra-index-url https://wheels.vtk.org vtk-osmesa
追記 2. 2024/11/19
vtk 9.4 から linux での Off screen 描画に vtk-osmesa は不要になったようです。2
まだ手元での確認はしていません。