面グラフのデータを格納する Surfaceメソッド
plotlyで面グラフを描画するにはgraph_objectsに面グラフのデータを格納する必要があります。面グラフのデータを作成するのに用いられるのがgraph_objectsのSurfaceメソッドです。 サンプルのソースコードは以下のようになります。
# -*- coding: utf-8 -*-
import plotly.graph_objects as go
z=[
[0.0,0.0,0.0,0.0,0.0]
,[0.0,1.0,2.0,3.0,4.0]
,[0.0,2.0,4.0,6.0,8.0]
,[0.0,3.0,6.0,9.0,12.0]
,[0.0,4.0,8.0,12.0,16.0]
]
fig = go.Figure(data=[go.Surface(z=z)])
fig.show()
実行結果
このサンプルコードでは面グラフの高さ(z軸)のデータのみ与えています。x軸(横)やy軸(縦)のデータが与えられていません。このようなとき高さ(z)のデータはx,yの幅が1×1のメッシュ上の高さのデータとして扱われます。
上図のようにx,y平面の1×1のメッシュを描きx=0,y=0から始まり最初のzのリストはy=0が固定でx=0, 1, 2, 3, …の時の高さとなります。次のzのリストはyの値が一つ増えy=1でx=0, 1, 2, 3, … のときの高さとなります。 これらの高さの点を面になるように繋いだものが面グラフになります。
↑目次
x軸、y軸のデータ値を与えて描画
前の例ではx軸、y軸の値を省略していました。そのためx,y軸の値は0, 1, 2…と0から始まる連番して面グラフが描画されました。このx軸、y軸のメッシュの値を指定する事ができます。
# -*- coding: utf-8 -*-
import plotly.graph_objects as go
z=[
[0.0,0.0,0.0,0.0,0.0]
,[0.0,1.0,2.0,3.0,4.0]
,[0.0,2.0,4.0,6.0,8.0]
,[0.0,3.0,6.0,9.0,12.0]
,[0.0,4.0,8.0,12.0,16.0]
]
fig = go.Figure(data=[go.Surface(z=z,x=[1.0,2.0,4.0,8.0,16.0],y=[1.0,2.0,4.0,8.0,16.0])])
fig.show()
Surfaceメソッドを呼び出す際にx軸、y軸のデータを与えています。
実行結果
↑目次
タイトルとラベル名の変更
タイトルとラベル名を変更するには以下のようにFigureWidgitのupdate_layoutメソッドを用います。
# -*- coding: utf-8 -*-
import plotly.graph_objects as go
z=[
[0.0,0.0,0.0,0.0,0.0]
,[0.0,1.0,2.0,3.0,4.0]
,[0.0,2.0,4.0,6.0,8.0]
,[0.0,3.0,6.0,9.0,12.0]
,[0.0,4.0,8.0,12.0,16.0]
]
fig = go.Figure(data=[go.Surface(z=z,x=[1.0,2.0,4.0,8.0,16.0],y=[1.0,2.0,4.0,8.0,16.0])])
fig.update_layout(
title='サンプルプロット'
,scene=dict(
xaxis=dict(title='x軸')
,yaxis=dict(title='y軸')
,zaxis=dict(title='高さ')
)
)
fig.show()
実行結果
タイトルと各軸の名称が変更されているのがわかります。
↑目次
まとめ
ここでは3D面グラフの描き方を見てみました。基本のデータ構造さえわかれば、後は公式サイト3D Surface Plots in Python のサンプルを見れば理解できるようになっているのではないでしょうか。 3D面グラフは他のグラフと重ねて描画したりもできます。【散布図と3D plotと回帰平面】plotlyで動的な可視化をする【python,scatter,3D,surface,pair,joint】
3D面グラフは見栄えも良く応用範囲の広いグラフですので色々な見せ方を研究してみてください。
↑目次
Comment on this article
コメントはまだありません。
Send comments