三次元のサーフェスプロット
plotly
ライブラリを使って、三次元のサーフェスプロットを描画してみましょう。
1 | import numpy as np |
このコードでは、以下の手順で3Dサーフェスプロットを描画しています。
np.linspace
関数を使って、$x$座標と$y$座標の範囲を設定します。np.meshgrid
関数を使って、$x$座標と$y$座標の組み合わせを生成します。- 三次元のサーフェスプロットのデータ
Z
を生成します。
ここでは、$sin(sqrt(x^2 + y^2))$ という式を使っています。 plotly
ライブラリのgo.Surface
関数を使って、サーフェスプロットを描画します。- グラフのタイトルと軸ラベルを設定します。
fig.update_traces
関数を使って、サーフェスプロットのカラースケールを設定します。
ここでは'Viridis'
というカラースケールを使っています。fig.show
関数を使って、グラフを表示します。
実行すると、以下のような美しい3Dサーフェスプロットが表示されます。
[実行結果]
このサーフェスプロットは、sin関数
を使った美しい波打つ形状をしています。
カラースケールの 'Viridis'
は、緑から紫へとなめらかに変化する色合いで、サーフェスの立体感を強調しています。
このようなサーフェスプロットは、様々な分野のデータを可視化するのに役立ちます。
例えば、地形データ、気象データ、物理現象のシミュレーションデータなどを3次元で表現できます。
Pythonの plotly
を使えば、このような美しい3Dグラフを簡単に描画できます。
ソースコード解説
ソースコードを詳しく説明していきます。
1. ライブラリのインポート
1 | import numpy as np |
最初に、NumPy
とPlotly
ライブラリをインポートしています。NumPy
は数値計算に使われる便利なライブラリで、Plotly
は対話的な可視化ツールです。
2. データの範囲の設定
1 | x = np.linspace(-3, 3, 50) |
ここでは、$x$座標と$y$座標のデータ範囲を設定しています。np.linspace
関数を使って、$-3$から$3$までの範囲を$50$個の等間隔のデータポイントに分割しています。
3. サーフェスプロットのデータ生成
1 | X, Y = np.meshgrid(x, y) |
次に、サーフェスプロットのデータを生成しています。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
オブジェクトを作成しています。x
、y
、z
には、先ほど生成したデータを渡しています。
5. グラフのタイトルと軸ラベルの設定
1 | fig.update_layout( |
fig.update_layout
メソッドを使って、グラフのタイトルと軸ラベルを設定しています。
また、グラフのサイズもwidth
とheight
で指定しています。
6. カラースケールの設定
1 | fig.update_traces(colorscale='Viridis') |
fig.update_traces
メソッドを使って、サーフェスプロットのカラースケールを設定しています。
ここでは'Viridis'
というカラースケールを使っています。
これは緑から紫へとなめらかに変化する色合いです。
7. グラフの表示
1 | fig.show() |
最後に、fig.show()
メソッドを実行して、作成したグラフを表示します。
このコードでは、NumPy
を使ってデータを生成し、Plotly
を使って対話的な3Dサーフェスプロットを描画しています。
サーフェスプロットは、波打つ形状をしており、カラースケールの設定により、美しい色合いで表現されています。
グラフのタイトルと軸ラベルも付けられているので、データの可視化がより分かりやすくなっています。