プロット (plot)¶
plot() は emout でいちばんよく使う機能です。スライス後の次元に応じて、自動で 1D ラインプロットと 2D カラーマップを切り替えます。
2D カラーマップ¶
3D ボリュームを 2D にスライスするとカラーマップが描画されます:
import emout
data = emout.Emout("output_dir")
# 最終ステップの xz 平面(y = ny//2)
data.phisp[-1, :, data.inp.ny // 2, :].plot()
# z=100 での xy 平面
data.phisp[-1, 100, :, :].plot()
1D ラインプロット¶
1D にスライスするとラインプロットが描画されます:
# x=32, y=32 での z 軸方向のプロファイル
data.phisp[-1, :, 32, 32].plot()
主なオプション¶
パラメータ |
型 |
説明 |
デフォルト |
|---|---|---|---|
|
|
SI 単位で軸ラベル・値を表示 |
|
|
|
|
|
|
|
ファイルに保存 |
|
|
|
カラーバーの最小値 |
自動 |
|
|
カラーバーの最大値 |
自動 |
|
colormap |
Matplotlib カラーマップ |
独自 gray-jet |
|
|
|
|
|
|
|
|
|
|
タイトルを指定 |
自動生成 |
|
|
x 軸ラベルを指定 |
自動生成 |
|
|
y 軸ラベルを指定 |
自動生成 |
使用例¶
ファイルに保存¶
data.phisp[-1, 100, :, :].plot(savefilename="phisp.png")
対数スケール¶
data.nd1p[-1, 100, :, :].plot(norm="log", vmin=1e-3, vmax=20)
等高線表示¶
data.phisp[-1, 100, :, :].plot(mode="cont")
カラーマップ + 等高線の重ね描き¶
data.phisp[-1, 100, :, :].plot(mode="cm+cont")
ベクトル場(ストリームライン)¶
2D ベクトルデータはストリームラインで描画されます:
data.j1xy[-1, 100, :, :].plot()
SI 単位と EMSES 単位¶
plot() は既定で軸ラベルと値を SI 単位に変換します。EMSES の内部単位のまま表示したい場合は:
data.phisp[-1, 100, :, :].plot(use_si=False)
SI 値の直接取得¶
.val_si プロパティで SI 単位の NumPy 配列を取得できます:
phisp_V = data.phisp[-1].val_si # 電位 [V]
j1z_A_m2 = data.j1z[-1].val_si # 電流密度 [A/m^2]
nd1p_m3 = data.nd1p[-1].val_si # 数密度 [/m^3]
データマスク¶
プロット前に特定の領域をマスクできます:
# 平均値以下をマスクしてプロット
data.phisp[1].masked(lambda phi: phi < phi.mean()).plot()
3D プロット(PyVista)¶
PyVista backend を使うと、2D スライスを 3D 空間に配置したり、3D scalar / vector field を描画できます。このページでは入口だけ示します。mode、重ね描き、保存、HPC での使い方は PyVista 可視化 を参照してください。
# 3D scalar volume surface
data.phisp[-1, :, :, :].plot3d(mode="box", show=True)
# 2D slice placed in 3D space
data.phisp[-1, 100, :, :].plot3d(show=True)
# 3D vector field
data.j1xyz[-1].plot3d(mode="stream", show=True)
メッシュサーフェスの描画¶
境界を 3D field に重ねたい場合は、まず data.boundaries.plot3d() または plot3d(..., surfaces=data.boundaries) を使います。境界メッシュの合成、境界ごとの style、field-sampled な plot_surfaces() の詳細は 境界メッシュ を参照してください。
data.phisp[-1].plot3d(mode="contour", levels=[0.0], filename="phisp_iso.png")
data.j1xyz[-1].plot3d(surfaces=data.boundaries, filename="j1_stream.png")