Plotly Isosurfaceを使った等値面プロット

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()

参考サイト#