※ 当サイトは、アフィリエイト広告を利用しています

【plotly】3次元Meshplotの作図方法

今回は,plotlyを使ってMesh3dの動作をみていきます。

Mesh3dを使うことで,3次元のデータから立体図を簡単に作図することができます。

この記事の目標

Mesh3dで立体図の作図を行う

以下のグラフを作ることを目標とします。
plotlyですので,ぐるぐる動かすことができるので,データがより直感的にわかると思います!

目次

データ,ライブラリの読み込み

データには,scikit-learnのワインのデータセット(公式サイト)を使います。

また,ライブラリにはsklearn, pandas, plotlyを使います。

#ライブラリのインポート
from sklearn import datasets
import pandas as pd
import plotly.graph_objects as go
#ワインデータの読み込み
data =  datasets.load_wine()
X=data['data']
Y=data['target']
wine_X = pd.DataFrame(X, columns=data['feature_names'])
df_wine = wine_X.copy()
df_wine['target']=Y
df_wine

Mesh3dの作図

Mesh3dの作図を行います。公式HPはこちらを参考にしてください。

x軸に’color_intensity’,y軸に’alcohol’,z軸に’alcalinity_of_ash’ をプロットします。

作成するグラフは↓です。

*上記はページの読み込み速度軽減のためpngです。

コードは↓です。

fig=go.Figure()

fig.add_trace(go.Mesh3d(x=df_wine['color_intensity'],
                        y=df_wine['alcohol'],
                        z=df_wine['alcalinity_of_ash'],
                        ))

fig.update_scenes(xaxis=dict(title=dict(text='color_intensity',
                                        font=dict(color='black',size=10))),
                  yaxis=dict(title=dict(text='alcohol',
                                        font=dict(color='black',size=10))),
                  zaxis=dict(title=dict(text='alcalinity_of_ash',
                                        font=dict(color='black',size=10))),
                  )
                  
fig.show()

作図には,fig.add_trace(go.Mesh3d(…))を使います

設定項目は以下のようになっています。

fig.add_trace(go.Mesh3d(
 x=○○○,
 y=○○○,
 z=○○○,
))

x = ○○○x軸のデータ
y = ○○○y軸のデータ
z = ○○○z軸のデータ

また,軸のタイトルの設定はfig.update_scenes(xaxis=dict(…),yaxis=dict(…),zaxis=dict(…))を使います。

設定項目は以下の通りです。

fig.update_scenes(
 xaxis=dict(

  text=○○○,
  font=dict(color=○○○, size=○○○)
  ),
 yaxis=dict(

  text=○○○,
  font=dict(color=○○○, size=○○○)
  ),
 zaxis=dict(

  text=○○○,
  font=dict(color=○○○, size=○○○)
  ),
)

x軸はxaxis=dict(…),y軸はyaxis=dict(…),z軸はzaxis=dict(…) で設定します。

text = ○○○軸のラベル名
font = dict(color=○○○)軸のラベル名の色
font = dict(size=○○○)軸のラベル名のサイズ

複数データのMesh3d

ここで,使用しているワインのデータセットは3種類のワインのデータがあります。

そこで,ワインの種類ごとに色分けして表示したいと思います。

グラフは以下の通りです。

*上記はページの読み込み速度軽減のためpngです。

このようにデータを可視化することで,ワインの種類を判別するとき参考になるかと思います。

コードは↓です。

#データの分割
wine_target0=df_wine[df_wine['target']==0]
wine_target1=df_wine[df_wine['target']==1]
wine_target2=df_wine[df_wine['target']==2]

#グラフ描写
fig=go.Figure()
#wine_target0
fig.add_trace(go.Mesh3d(x=wine_target0['color_intensity'],
                        y=wine_target0['alcohol'],
                        z=wine_target0['alcalinity_of_ash'],
                        name='wine_target0',
                        showlegend=True,
                        visible=True,
                        color='blue',
                        opacity=1
                        ))

#wine_target1
fig.add_trace(go.Mesh3d(x=wine_target1['color_intensity'],
                        y=wine_target1['alcohol'],
                        z=wine_target1['alcalinity_of_ash'],
                        name='wine_target1',
                        showlegend=True,
                        visible=True,
                        color='red',
                        opacity=1                        
                        ))

#wine_target2
fig.add_trace(go.Mesh3d(x=wine_target2['color_intensity'],
                        y=wine_target2['alcohol'],
                        z=wine_target2['alcalinity_of_ash'],
                        name='wine_target2',
                        showlegend=True,
                        visible=True,
                        color='lawngreen',
                        opacity=1                        
                        ))

fig.update_scenes(xaxis=dict(title=dict(text='color_intensity',
                                        font=dict(color='black',size=10))),
                  yaxis=dict(title=dict(text='alcohol',
                                        font=dict(color='black',size=10))),
                  zaxis=dict(title=dict(text='alcalinity_of_ash',
                                        font=dict(color='black',size=10))),
                  )                  

fig.show()

まず,2-4行目でワインの種類ごとにデータの分割をしています。

ワインの種類ごとにfig.add_trace(go.Mesh3d(…))でグラフを作成しており,その中で新たに凡例や色などの設定をしています。

判例や色などは以下で設定します。

fig.add_trace(go.Mesh3d(
 …
 name=○○○,
 showlegend=○○○,

 visible=○○○,
 color=○○○,
 opacity=○○○,
))

name = ○○○凡例名
showlegend = ○○○‘True’ : 凡例の表示
‘False’ : 凡例の非表示
visible = ○○○‘True’ : グラフの表示
‘False’ : グラフの非表示
‘legendonly’ : 凡例の項目のみ表示(showlegend=Trueの場合)
color = ○○○グラフの色
opacity = ○○○グラフの透明度

以下では,上記表の設定を変えた場合のグラフを確認します。

visible = ‘legendonly’

まずは,wine_target0 をshowlegend=True, visible=‘legendonly’ と設定すると以下のグラフになります。

デフォルトでは凡例のみが表示され,グラフは表示されません。(plotlyですので,凡例をクリックすればグラフは表示できます。)

*上記はページの読み込み速度軽減のためpngです。

opacityの変更

次に,wine_target0 のopacityを0.8, 0.5, 0.3と変更してみます。

*下記はページの読み込み速度軽減のためpngです。

まとめ

Mesh3dでの作図方法をみてきました。

作図には,

fig.add_trace(go.Mesh3d(
 x=○○○,
 y=○○○,
 z=○○○,
))

の項目を設定します。

軸のタイトルの設定はfig.update_scenes(xaxis=dict(…),yaxis=dict(…),zaxis=dict(…))を使います。

冒頭のコードはこちら
#ライブラリのインポート
from sklearn import datasets
import pandas as pd
import plotly.graph_objects as go
#ワインデータの読み込み
data =  datasets.load_wine()
X=data['data']
Y=data['target']
wine_X = pd.DataFrame(X, columns=data['feature_names'])
df_wine = wine_X.copy()
df_wine['target']=Y
df_wine

#データの分割
wine_target0=df_wine[df_wine['target']==0]
wine_target1=df_wine[df_wine['target']==1]
wine_target2=df_wine[df_wine['target']==2]

#作図
fig=go.Figure()
fig.add_trace(go.Mesh3d(x=wine_target0['color_intensity'],
                        y=wine_target0['alcohol'],
                        z=wine_target0['alcalinity_of_ash'],
                        name='wine_target0',
                        showlegend=True,
                        visible=True, #'legendonly',
                        color='blue',
                        opacity=1
                        ))

fig.add_trace(go.Mesh3d(x=wine_target1['color_intensity'],
                        y=wine_target1['alcohol'],
                        z=wine_target1['alcalinity_of_ash'],
                        name='wine_target1',
                        showlegend=True,
                        visible=True,#'legendonly',
                        color='red',
                        opacity=1
                        ))

fig.add_trace(go.Mesh3d(x=wine_target2['color_intensity'],
                        y=wine_target2['alcohol'],
                        z=wine_target2['alcalinity_of_ash'],
                        name='wine_target2',
                        showlegend=True,
                        visible=True,#'legendonly',
                        color='lawngreen',
                        opacity=1
                        ))

fig.update_scenes(xaxis=dict(title=dict(text='color_intensity',
                                        font=dict(color='black',size=10))),
                  yaxis=dict(title=dict(text='alcohol',
                                        font=dict(color='black',size=10))),
                  zaxis=dict(title=dict(text='alcalinity_of_ash',
                                        font=dict(color='black',size=10))),
                  )

fig.show()

以上,3次元Meshplotの作図方法 でした!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次