複数のパラメータなどをもつデータの解析において,相関を確認するためパラメータ同士のグラフを作成することがあると思います。
そのようなとき,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)の作図方法 でした!
コメント