3Dプロット Plotly

3Dプロット

Plotlyライブラリを使って、複数の3Dプロットを組み合わせて表現してみます。

以下に、複数の3Dサブプロットを表示する例を示します。

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
import plotly.graph_objs as go
import plotly.subplots as subplots
import numpy as np

# サンプルデータの生成
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z1 = np.sin(np.sqrt(x**2 + y**2))
z2 = np.cos(np.sqrt(x**2 + y**2))
z3 = x**2 - y**2

# 3Dサブプロットの作成
fig = subplots.make_subplots(rows=1, cols=3,
subplot_titles=('sin(sqrt(x^2 + y^2))', 'cos(sqrt(x^2 + y^2))', 'x^2 - y^2'),
specs=[[{'type': 'surface'}, {'type': 'surface'}, {'type': 'surface'}]])

# 3つの3Dサブプロットを追加
fig.add_trace(go.Surface(x=x, y=y, z=z1, colorscale='Viridis'), row=1, col=1)
fig.add_trace(go.Surface(x=x, y=y, z=z2, colorscale='Rainbow'), row=1, col=2)
fig.add_trace(go.Surface(x=x, y=y, z=z3, colorscale='Jet'), row=1, col=3)

# レイアウトの設定
fig.update_layout(title_text='複数の3Dサブプロット', height=600, width=1000)
fig.show()

このコードは、3つの異なる3Dプロットを1つのグラフに表示しています。

それぞれのプロットは異なる関数を表しており、それを3Dサブプロットとして横に並べて表示しています。

サンプルデータとして、2つの円周の$sin$、$cos$関数、そして$ x^2 - y^2 $の関数を生成し、それぞれの3Dサブプロットを作成しています。

これにより、複数の3Dグラフを組み合わせて表示する方法がわかります。

ソースコード解説

ソースコードの各部分を順に説明します。

ライブラリのインポート

1
2
3
import plotly.graph_objs as go
import plotly.subplots as subplots
import numpy as np
  • plotly.graph_objs はPlotlyのグラフオブジェクトを作成するためのモジュールです。
  • plotly.subplots はPlotlyのサブプロットを作成するためのモジュールです。
  • numpy は数値計算を行うためのライブラリです。

サンプルデータの生成

1
2
3
4
5
6
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z1 = np.sin(np.sqrt(x**2 + y**2))
z2 = np.cos(np.sqrt(x**2 + y**2))
z3 = x**2 - y**2
  • np.linspace() は一様に区間を分割する関数で、-5から5までの区間を100分割してxとyの値を生成しています。
  • np.meshgrid() はx、yの値から格子状の座標を作成しています。
  • np.sin()np.cos()**(べき乗演算子)を使用してz1、z2、z3の値を計算しています。

3Dサブプロットの作成

1
2
3
fig = subplots.make_subplots(rows=1, cols=3,
subplot_titles=('sin(sqrt(x^2 + y^2))', 'cos(sqrt(x^2 + y^2))', 'x^2 - y^2'),
specs=[[{'type': 'surface'}, {'type': 'surface'}, {'type': 'surface'}]])
  • subplots.make_subplots() は、指定された行数と列数のサブプロットを作成する関数です。
    ここでは1行3列のサブプロットを作成しています。
  • subplot_titles は、各サブプロットのタイトルを指定しています。
  • specs は各サブプロットのタイプを指定しています。

3つの3Dサブプロットを追加

1
2
3
fig.add_trace(go.Surface(x=x, y=y, z=z1, colorscale='Viridis'), row=1, col=1)
fig.add_trace(go.Surface(x=x, y=y, z=z2, colorscale='Rainbow'), row=1, col=2)
fig.add_trace(go.Surface(x=x, y=y, z=z3, colorscale='Jet'), row=1, col=3)
  • fig.add_trace() を使用して、各3Dサブプロットを作成しています。
  • go.Surface() は3Dサーフェスプロットを作成するPlotlyの関数です。
  • colorscale はカラーマップの設定を行っています。

レイアウトの設定と表示

1
2
fig.update_layout(title_text='複数の3Dサブプロット', height=600, width=1000)
fig.show()
  • fig.update_layout() でグラフ全体のレイアウトを設定しています。
    ここではグラフのタイトルとサイズを指定しています。
  • fig.show() で作成したグラフを表示しています。

このコードは、3つの異なる関数を表す3Dサブプロットを作成し、それらを1つのグラフにまとめて表示するものです。

それぞれのサブプロットは、異なる特徴を持つ関数を3Dプロットとして表現しています。