Plotly Isosurfaceを使った等値面プロット#
※記事内に商品プロモーションを含むことがあります。
公開日
Pythonのインタラクティブなグラフを描画できるライブラリPlotlyにて、Isosurface
を使った等値面プロットを描画する方法を解説します。
等値面プロットは、3次元空間におけるスカラー値を描画するものです。 3次元空間における気温をプロットするイメージです。
Plotlyには、高水準のAPIであるPlotly Expressと呼ばれるものもありますが、
この記事では細かい調節ができるgraph_objects
を対象としています。
リンク
Isosurfaceの基礎#
go.Isosurface
を使った等値面プロットの簡単な例を示します。
go.Isosurface()
のx
, y
, z
に座標を、value
に3次元空間における値を指定します。
import plotly.graph_objects as go
x = [0, 0, 0, 0, 1, 1, 1, 1]
y = [0, 0, 1, 1, 0, 0, 1, 1]
z = [0, 1, 0, 1, 0, 1, 0, 1]
values = [0, 0, 1, 1, 2, 2, 3, 3]
fig = go.Figure(
data=go.Isosurface(x=x, y=y, z=z, value=values)
)
fig.show()
Isosurfaceの詳細#
go.Isosurface
の主要なオプションを示します。
isomin
,isomax
(float): 等値面の最小値、最大値surface_count
(int): プロットする等値面の数colorbar_nticks
(int): カラーバーの目盛りの数caps
(dict): 各軸の上限・下限の面に等値面を表示するかどうかopacity
(float): 透明度(0~1). 0に近いほど透明colorscale
(str): カラーマップ
以下に(x, y, z)=(0, 0, 0)
を中心とする球体の等値面プロットを示します。
なお、np.mgrid
は、np.meshgrid
の多次元版です。
変数x
, y
, z
はそれぞれ3次元のNumPy配列になるため、flatten()
で1次元配列に変換しています。
import numpy as np
x, y, z = np.mgrid[0:6, 0:6, 0:6]
values = x ** 2 + y ** 2 + z ** 2
fig = go.Figure(
data=go.Isosurface(
x=x.flatten(),
y=y.flatten(),
z=z.flatten(),
value=values.flatten(),
isomin=10,
isomax=70,
surface_count=5,
colorbar_nticks=7,
caps=dict(x_show=False, y_show=False, z_show=False)
)
)
fig.show()