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

【plotly】散布図行列(pairplot)の作図方法

複数のパラメータなどをもつデータの解析において,相関を確認するためパラメータ同士のグラフを作成することがあると思います。

そのようなとき,plotlyで散布図行列の作図を行ってはいかがでしょうか?

plotlyを使うことで,作図後も表示範囲の変更やマウスオーバーによってプロット点の情報を簡単に取得できます。

本記事の目標

plotlyを使った散布図行列(pairplot)を作図

カテゴリーごとに色分けした散布図行列(pairplot)の作図

散布図行列(pairplot)の,その他の表現法による作図

目標とするグラフは↓です。

このグラフを触って頂くとわかりますが、簡単に表示範囲の変更やマウスオーバーにてプロット点の情報が得られます。

*上図はpc以外では画像表示です。plotlyでぐりぐり動かしたい場合はpcからアクセスをお願いします!

*このグラフのコードは,最後のまとめにあります。一括でコピペしたい場合は,そちらを参考にしてください。

目次

ライブラリ,データのインポート

データには,scikit-learnのワインのデータセット(公式HPはこちらをご覧ください)を使います。

また,インポートするライブラリは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

df_wineの中身はこちらです。

今回はこの中から,“alcohol”, “ash”, “magnesium”, “color_intensity”を使います。

散布図行列(pairplot)の作図

散布図行列(pairplot)の作図を行います。公式HPはこちらです。

ワインのデータセットの中から,“alcohol”, “ash”, “magnesium”, “color_intensity”の4つのパラメータをプロットします。

ここで作成するグラフはこちら↓です。

*上図は画像です

コードはこちらです。

fig = go.Figure()
fig.add_trace(go.Splom(dimensions=[dict(label='alcohol',
                                        values=df_wine['alcohol']),
                                   dict(label='ash',
                                        values=df_wine['ash']),
                                   dict(label='magnesium',
                                        values=df_wine['magnesium']),
                                   dict(label='color_intensity',
                                        values=df_wine['color_intensity'])],
                       ))

fig.show()

グラフを作成する大まかな流れは下記のようになります。

グラフ作成の流れ

1. fig = go.Figure() : グラフ(インスタンス)の作成
2. fig.add_trace() : グラフデータの設定
3. fig.update_layout() : グラフの軸やタイトルの設定
4. fig.show() : グラフの表示
5. ( fig.write_html() ) : グラフ保存

散布図行列を作成するには,2.のfig.add_trace(…)で下記のように設定します。

散布図行列の設定

dict(label=○○○, values=○○○) はプロットしたい項目に応じて追加します。

fig.add_trace(go.Splom(dimensions=[dict(label= <VALUE>,
                                        values= <VALUE>),
                                   dict(label= <VALUE>,
                                        values= <VALUE>),
                                   …],
                       ))
dimensions=[dict(…)]label= ○○○散布図行列でプロットするデータのラベル名
values= ○○○散布図行列でプロットするデータの値

今回は5つのパラメータをプロットしているので、dict(label=○○○, values=○○○) は5つ分記述しています。

カテゴリーごとによる色分け

今回使用しているデータは,3種類のワインのデータです。

ここでは,ワインの種類(カテゴリー)ごとの色分けをしたいと思います。

グラフは以下のようになります。

*上図は画像です

コードはこちらです。

fig = go.Figure()
fig.add_trace(go.Splom(dimensions=[dict(label='alcohol',
                                        values=df_wine['alcohol']),
                                   dict(label='ash',
                                        values=df_wine['ash']),
                                   dict(label='magnesium',
                                        values=df_wine['magnesium']),
                                   dict(label='color_intensity',
                                        values=df_wine['color_intensity'])],
                       text=df_wine['target'],
                       marker=dict(color=df_wine['target'],
                                   line=dict(color='white', width=0.3)),
                       ))
fig.show()

カテゴリーごとに色分けするにあたり,下記のmarker=dict(…)を設定します。

カテゴリーごとの色分け設定
fig.add_trace(go.Splom(…,
                       marker=dict(color= <VALUE>,
                                   line=dict(color= <VALUE>, width= <VALUE>)),
                       ))
marker=dict(…)color= ○○○プロットするマーカーの色
line= dict(…)color= ○○○プロットするマーカーの枠線の色
width= ○○○プロットするマーカーの枠線の太さ

散布図行列(pairplot)の表現法 -4パターン-

ここからはさらに,先ほどまでのグラフを基に4つの表現パータンを見たいと思います。

対角線のプロットの非表示

まずは,対角線上のプロットを非表示にする方法をみます。

作成したグラフはこちら↓です。

※上図は画像です

コードは以下になります。

fig = go.Figure()
fig.add_trace(go.Splom(dimensions=[dict(label='alcohol',
                                        values=df_wine['alcohol']),
                                   dict(label='ash',
                                        values=df_wine['ash']),
                                   dict(label='magnesium',
                                        values=df_wine['magnesium']),
                                   dict(label='color_intensity',
                                        values=df_wine['color_intensity'])],
                       diagonal_visible=False,
                       text=df_wine['target'],
                       marker=dict(color=df_wine['target'],
                                   line=dict(color='white', width=0.3))
                       ))

fig.show()

対角線上のプロットを非表示にするには,下記のdiagonal_vidibleを設定します。

対角線のプロットの非表示設定
fig.add_trace(go.Splom(…,
                       diagonal_visible= <VALUE>,
                       ))
diagonal_visible=○○○“True”, “False” から選択
“False”: 対角線上のプロットを非表示
“True” : 対角線上のプロットを表示

上半分の非表示

次に,散布図行列の上半分を非表示にする方法をみます。

グラフは以下になります。

*上図は画像です

コードはこちらです。

fig = go.Figure()

fig.add_trace(go.Splom(dimensions=[dict(label='alcohol',
                                        values=df_wine['alcohol']),
                                   dict(label='ash',
                                        values=df_wine['ash']),
                                   dict(label='magnesium',
                                        values=df_wine['magnesium']),
                                   dict(label='color_intensity',
                                        values=df_wine['color_intensity'])],
                       showupperhalf=False,
                       text=df_wine['target'],
                       marker=dict(color=df_wine['target'],
                                   line=dict(color='white', width=0.3))
                       ))

fig.show()

上半分を非表示にするには,下記のshowupperhalfを設定します。

対角線の上半分の非表示設定
fig.add_trace(go.Splom(…,
                       showupperhalf= <VALUE>,
                       ))
showupperhalf=○○○“True”, “False” から選択
“False”: 上半分のプロットを非表示
“True” : 上半分のプロットを表示

下半分の非表示

下半分を非表示にする方法は以下になります。

*上図は画像です

コードはこちらです。

fig = go.Figure()

fig.add_trace(go.Splom(dimensions=[dict(label='alcohol',
                                        values=df_wine['alcohol']),
                                   dict(label='ash',
                                        values=df_wine['ash']),
                                   dict(label='magnesium',
                                        values=df_wine['magnesium']),
                                    dict(label='color_intensity',
                                        values=df_wine['color_intensity'])],
                       showlowerhalf=False,
                       text=df_wine['target'],
                       marker=dict(color=df_wine['target'],
                                   line=dict(color='white',width=0.3))
                       ))
fig.show()

下半分を非表示にするには,下記のshowlowerhalfを設定します。

対角線の下半分の非表示設定
fig.add_trace(go.Splom(…,
                       showlowerhalf= <VALUE>,
                       ))
showlowerhalf=○○○“True”, “False” から選択
“False”: 下半分のプロットを非表示
“True” : 下半分のプロットを表示

一部のパラメータの非表示

最後に,一部のパラメータを非表示にする方法です。

*上図は画像です

コードはこちらです。

fig = go.Figure()

fig.add_trace(go.Splom(dimensions=[dict(label='alcohol',
                                        values=df_wine['alcohol']),
                                   dict(label='ash',
                                        values=df_wine['ash']),
                                   dict(label='magnesium',
                                        values=df_wine['magnesium'],
                                        visible=False),
                                   dict(label='color_intensity',
                                        values=df_wine['color_intensity'])],
                       text=df_wine['target'],
                       marker=dict(color=df_wine['target'],
                                   line_color='white', line_width=0.3)
                       ))
fig.show()

上の例では,”magnesium”を非表示とするため,9行目でvisible=○○○を設定しています。

設定する詳細は以下の通りです。

一部のパラメータの非表示設定

非表示にしたいパラメータに対して,以下の太字の設定を行います。

fig.add_trace(go.Splom(dimensions=[…,
                                   dict(label= <VALUE>,
                                        values= <VALUE>,
                                        visible= <VALUE>),
                                   …],
                       ))
dimensions=[dict(…)]visible=○○○“True”, “False” から選択
“False”: データのプロットを非表示
“True” : データのプロットを表示 (デフォルト)

まとめ

plotlyを使った散布図行列(pairplot)の作図方法をみてきました。

グラフの大まかな流れは以下の通りです。

グラフ作成の流れ

1. fig = go.Figure() : グラフ(インスタンス)の作成
2. fig.add_trace() : グラフデータの設定
3. fig.update_layout() : グラフの軸やタイトルの設定
4. fig.show() : グラフの表示
5. ( fig.write_html() ) : グラフ保存

散布図行列の作図は,2.fig.add_trace()で設定します。

以下で,本記事で紹介した散布図行列の設定項目を一覧でまとめています。

散布図行列の設定

dict(label=○○○, values=○○○) はプロットしたい項目に応じて追加します。

fig.add_trace(go.Splom(dimensions=[dict(label= <VALUE>,
                                        values= <VALUE>,
                                        visible= <VALUE>),
                                   dict(label= <VALUE>,
                                        values= <VALUE>,
                                        visible= <VALUE>),
                                   …],
                       #カテゴリーごとの色分け設定
                       marker=dict(color= <VALUE>,
                                   line=dict(color= <VALUE>, width= <VALUE>)),
                       #対角線のプロットの非表示設定
                       diagonal_visible= <VALUE>,
                       #上半分の非表示設定
                       showupperhalf= <VALUE>,
                       #下半分の非表示設定
                       showlowerhalf= <VALUE>,

                       ))
dimensions=[dict(…)]label= ○○○散布図行列でプロットするデータのラベル名
values= ○○○散布図行列でプロットするデータの値
visible=○○○“True”, “False” から選択
“False”: データのプロットを非表示
“True” : データのプロットを表示 (デフォルト)
# カテゴリーごとの色分け設定
marker=dict(…)color= ○○○プロットするマーカーの色
line= dict(…)color=○○○プロットするマーカーの枠線の色
width=○○○プロットするマーカーの枠線の太さ
# 対角線のプロットの非表示設定
diagonal_visible= ○○○“True”, “False” から選択
“False”: 対角線上のプロットを非表示
“True” : 対角線上のプロットを表示
# 上半分の非表示設定
showupperhalf=○○○“True”, “False” から選択
“False”: 上半分のプロットを非表示
“True” : 上半分のプロットを表示
# 下半分の非表示設定
showlowerhalf=○○○“True”, “False” から選択
“False”: 下半分のプロットを非表示
“True” : 下半分のプロットを表示
冒頭のグラフのコードはこちら
#ライブラリのインポート
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

fig = go.Figure()
fig.add_trace(go.Splom(dimensions=[dict(label='alcohol',
                                        values=df_wine['alcohol']),
                                   dict(label='ash',
                                        values=df_wine['ash']),
                                   dict(label='magnesium',
                                        values=df_wine['magnesium']),
                                   dict(label='color_intensity',
                                        values=df_wine['color_intensity'])],
                       text=df_wine['target'],
                       marker=dict(color=df_wine['target'],
                                   line=dict(color='white', width=0.3)),
                       ))
fig.show()

読了お疲れ様でした!

以上,【plotly】散布図行列(pairplot)の作図方法 でした!

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

コメント

コメントする

目次