三次元のサーフェスプロット (Plotly)

三次元のサーフェスプロット

plotly ライブラリを使って、三次元のサーフェスプロットを描画してみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
import plotly.graph_objects as go

# データの範囲を設定
x = np.linspace(-3, 3, 50)
y = np.linspace(-3, 3, 50)

# 三次元のサーフェスプロットのデータを生成
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# サーフェスプロットを描画
fig = go.Figure(data=[go.Surface(x=X, y=Y, z=Z)])

# グラフのタイトルと軸ラベルを設定
fig.update_layout(
title='Beautiful 3D Surface Plot',
scene=dict(
xaxis_title='X',
yaxis_title='Y',
zaxis_title='Z'
),
width=800,
height=600
)

# カラースケールを設定
fig.update_traces(colorscale='Viridis')

# グラフを表示
fig.show()

このコードでは、以下の手順で3Dサーフェスプロットを描画しています。

  1. np.linspace 関数を使って、$x$座標と$y$座標の範囲を設定します。
  2. np.meshgrid 関数を使って、$x$座標と$y$座標の組み合わせを生成します。
  3. 三次元のサーフェスプロットのデータ Z を生成します。
    ここでは、$sin(sqrt(x^2 + y^2))$ という式を使っています。
  4. plotly ライブラリの go.Surface 関数を使って、サーフェスプロットを描画します。
  5. グラフのタイトルと軸ラベルを設定します。
  6. fig.update_traces 関数を使って、サーフェスプロットのカラースケールを設定します。
    ここでは 'Viridis' というカラースケールを使っています。
  7. fig.show 関数を使って、グラフを表示します。

実行すると、以下のような美しい3Dサーフェスプロットが表示されます。

[実行結果]

このサーフェスプロットは、sin関数を使った美しい波打つ形状をしています。
カラースケールの 'Viridis' は、緑から紫へとなめらかに変化する色合いで、サーフェスの立体感を強調しています。

このようなサーフェスプロットは、様々な分野のデータを可視化するのに役立ちます。

例えば、地形データ気象データ物理現象のシミュレーションデータなどを3次元で表現できます。

Pythonの plotly を使えば、このような美しい3Dグラフを簡単に描画できます。

ソースコード解説

ソースコードを詳しく説明していきます。

1. ライブラリのインポート

1
2
import numpy as np
import plotly.graph_objects as go

最初に、NumPyPlotlyライブラリをインポートしています。
NumPyは数値計算に使われる便利なライブラリで、Plotlyは対話的な可視化ツールです。

2. データの範囲の設定

1
2
x = np.linspace(-3, 3, 50)
y = np.linspace(-3, 3, 50)

ここでは、$x$座標と$y$座標のデータ範囲を設定しています。
np.linspace関数を使って、$-3$から$3$までの範囲を$50$個の等間隔のデータポイントに分割しています。

3. サーフェスプロットのデータ生成

1
2
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

次に、サーフェスプロットのデータを生成しています。
np.meshgrid関数を使って、$x$と$y$の組み合わせを2次元配列として生成しています。
そして、 Z = np.sin(np.sqrt(X**2 + Y**2))という式を使って、$z$座標のデータを計算しています。
この式は、円形の波打つ形状を表しています。

4. サーフェスプロットの描画

1
fig = go.Figure(data=[go.Surface(x=X, y=Y, z=Z)])

Plotlyのgo.Surface関数を使って、サーフェスプロットを描画するためのfigオブジェクトを作成しています。
xyzには、先ほど生成したデータを渡しています。

5. グラフのタイトルと軸ラベルの設定

1
2
3
4
5
6
7
8
9
10
fig.update_layout(
title='Beautiful 3D Surface Plot',
scene=dict(
xaxis_title='X',
yaxis_title='Y',
zaxis_title='Z'
),
width=800,
height=600
)

fig.update_layoutメソッドを使って、グラフのタイトルと軸ラベルを設定しています。
また、グラフのサイズもwidthheightで指定しています。

6. カラースケールの設定

1
fig.update_traces(colorscale='Viridis')

fig.update_tracesメソッドを使って、サーフェスプロットのカラースケールを設定しています。
ここでは'Viridis'というカラースケールを使っています。
これは緑から紫へとなめらかに変化する色合いです。

7. グラフの表示

1
fig.show()

最後に、fig.show()メソッドを実行して、作成したグラフを表示します。

このコードでは、NumPyを使ってデータを生成し、Plotlyを使って対話的な3Dサーフェスプロットを描画しています。

サーフェスプロットは、波打つ形状をしており、カラースケールの設定により、美しい色合いで表現されています。

グラフのタイトルと軸ラベルも付けられているので、データの可視化がより分かりやすくなっています。