Home > 記事 > Python > Plotly > 【Plotly】3D面グラフの描き方 | 3D Surface Plot | データを見える化する

記事

【Plotly】3D面グラフの描き方 | 3D Surface Plot | データを見える化する

Plotlyの入門編。今回は3D面グラフの描き方をみてゆきたいと思います。

Plotlyの公式サイト3D Surface Plots in Python を見ても3D面グラフをどのように書けばよいか、すぐに理解できる人は少ないと思います。 私もそうでした。理由はいくつか考えられますが、サンプルソースの中でデータとデータを生成する数式や外部データの取得を一緒に記述しているからだと思います。 グラフの描画を説明するのであれば、データはサンプルソースの中で直に記述して、描画にフォーカスした内容のほうが理解しやすいのではないかと思います。 そのためこの記事ではデータを生成する部分やデータの取得は記載せず、データは具体的な数字を記載します。そしてグラフのデータ形式や描画にフォーカスを当てて解説します。

目次

  1. 面グラフのデータを格納する Surfaceメソッド
  2. x軸、y軸のデータ値を与えて描画
  3. タイトルとラベル名の変更
  4. まとめ

面グラフのデータを格納する 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()

実行結果

plotly-surface-plot-sample-1-1
plotly-surface-plot-sample-1-2
 

このサンプルコードでは面グラフの高さ(z軸)のデータのみ与えています。x軸(横)やy軸(縦)のデータが与えられていません。このようなとき高さ(z)のデータはx,yの幅が1×1のメッシュ上の高さのデータとして扱われます。

plotly-surface-plot-data-stracture

上図のように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軸のデータを与えています。

実行結果

plotly-surface-plot-sample-2-1

plotly-surface-plot-sample-2-2

↑目次

タイトルとラベル名の変更

タイトルとラベル名を変更するには以下のように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()

実行結果

plotly-surface-plot-sample-3-1

タイトルと各軸の名称が変更されているのがわかります。

↑目次

まとめ

ここでは3D面グラフの描き方を見てみました。基本のデータ構造さえわかれば、後は公式サイト3D Surface Plots in Python のサンプルを見れば理解できるようになっているのではないでしょうか。 3D面グラフは他のグラフと重ねて描画したりもできます。【散布図と3D plotと回帰平面】plotlyで動的な可視化をする【python,scatter,3D,surface,pair,joint】

3D面グラフは見栄えも良く応用範囲の広いグラフですので色々な見せ方を研究してみてください。

↑目次

Comment on this article

コメントはまだありません。

Send comments

必須
必須  
※ メールアドレスは公開されません
任意
必須
Loading...  Please enter the letters of the image