【Seaborn】pairplotによる変数間の関係の可視化#
公開日
Seabornのpairplot
関数は、2変数間の散布図と各変数の分布をまとめてプロットできる機能を持っています。この記事では、pairplot
関数の使用方法とオプションについて解説します。
pairplot関数の基本#
まず、pairplot
関数でプロットするデータとして、iris(アヤメ)データセットを取得します。
import seaborn as sns
df = sns.load_dataset("iris")
df
sepal_length | sepal_width | petal_length | petal_width | species | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa |
... | ... | ... | ... | ... | ... |
145 | 6.7 | 3.0 | 5.2 | 2.3 | virginica |
146 | 6.3 | 2.5 | 5.0 | 1.9 | virginica |
147 | 6.5 | 3.0 | 5.2 | 2.0 | virginica |
148 | 6.2 | 3.4 | 5.4 | 2.3 | virginica |
149 | 5.9 | 3.0 | 5.1 | 1.8 | virginica |
150 rows × 5 columns
irisデータセットは、sepal(花のガク)の長さと幅、petal(花びら)の長さと幅、species(花の種類)の5つの変数からなります。また、データの数は150です。これをpairplot
関数でプロットします。
sns.pairplot(df)
<seaborn.axisgrid.PairGrid at 0x23502777830>
このように数量データをプロットしてくれます。左上から右下までの対角の4つのグラフは、各変数の分布を表すヒストグラムです。対角以外のグラフは、2つの変数間の散布図となります。
pairplot
関数の主なオプションを以下に示します。
オプション |
型 |
説明 |
---|---|---|
hue |
str |
色分けをするカテゴリ変数名 |
hue_order |
list of str |
hueの順番 |
palette |
dict/str |
hueの色を指定。カラーマップも指定可能 |
vars |
str |
プロットする数値データ名。指定しなければ全数値データをプロット |
x_vars/y_vars |
list of str |
横・縦方向にプロットする数値データ名 |
kind |
str |
対角以外のグラフのプロット方法。 |
diag_kind |
str |
対角グラフのプロット方法。 |
markers |
str/list |
散布図のマーカの種類 |
height |
float |
各グラフの高さ |
aspect |
float |
|
corner |
bool |
|
plot_kws |
dict |
対角以外のグラフのオプションを指定する |
diag_kws |
dict |
対角のグラフのオプションを指定する |
カテゴリ変数による色分け#
hue
オプションにカテゴリ変数を指定することにより、カテゴリ変数の値ごとに色分けされたグラフが出力されます。
sns.pairplot(df, hue="species")
<seaborn.axisgrid.PairGrid at 0x23502d97da0>
palette
オプションでは、カテゴリ変数ごとの色を指定できます。指定方法は2つあります。1つは辞書形式で、変数ごとに色の名前を指定します。
sns.pairplot(df, hue="species",
palette={"setosa": "red",
"versicolor": "blue",
"virginica": "green"})
<seaborn.axisgrid.PairGrid at 0x23505127b60>
もう1つの方法は、カラーマップの名前を与える方法です。指定可能なカラーマップについては以下のページを参照下さい。
sns.pairplot(df, hue="species", palette="Blues")
<seaborn.axisgrid.PairGrid at 0x235028b5820>
プロットするデータの指定#
vars
オプションでプロットする変数を指定できます。以下のように、変数名をリストで与えます。
sns.pairplot(df, vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x235085577a0>
横方向と縦方向でプロットする変数を変えたい場合、x_vars
, y_vars
オプションを使用します。vars
オプションと同様に、変数名をリストで与えます。
sns.pairplot(df, x_vars=["sepal_length", "sepal_width","petal_length"],
y_vars=["sepal_length", "sepal_width"])
<seaborn.axisgrid.PairGrid at 0x235087bca40>
カーネル密度推定のグラフ#
kind
オプションにkde
を指定すると、カーネル密度推定のグラフとなります。さらに、hue
オプションにカテゴリ変数を指定した場合、カテゴリごとにカーネル密度推定が行われます。
sns.pairplot(df, kind="kde",
vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x235086d8440>
sns.pairplot(df, kind="kde", hue="species",
vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x2350900d370>
ヒストグラム#
kind
オプションにhist
を指定すると、ヒストグラムとなります。対角以外のグラフは2次元のヒストグラム、すなわちヒートマップになります。さらに、hue
オプションにカテゴリ変数を指定した場合、カテゴリごとに色分けされたヒストグラムとなります。
sns.pairplot(df, kind="hist",
vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x23509853e30>
sns.pairplot(df, kind="hist", hue="species",
vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x2350a399400>
線形回帰グラフ#
kind
オプションにreg
を指定すると、対角以外は散布図となり、さらに線形回帰により求めた直線が追加されます。さらに、hue
オプションにカテゴリ変数を指定した場合、カテゴリごとに求めた線形回帰の直線がプロットされます。
sns.pairplot(df, kind="reg",
vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x2350bc22600>
sns.pairplot(df, kind="reg", hue="species",
vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x2350892d6d0>
マーカーの種類#
markers
オプションで散布図のマーカーの種類を変更できます。文字列で与えると、全て同じ種類のマーカーとなります。またはリストで与えて、カテゴリごとにマーカーの種類を変更することも可能です。
sns.pairplot(df, markers="x", hue="species",
vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x2350bba92e0>
sns.pairplot(df, hue="species", markers=["o", "v", "s"],
vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x2350d182150>
左下側のみグラフ表示#
corner
オプションをTrue
とすると、対角と左下側のグラフのみ表示されます(対角より右上側のグラフは表示されなくなります)。
sns.pairplot(df, corner=True,
vars=["sepal_length", "petal_length"])
<seaborn.axisgrid.PairGrid at 0x2350d5adfd0>
グラフの追加#
pairplot
関数で出力したグラフに、さらにグラフを追加する方法を解説します。
pairplot
関数の戻り値は、PairGridと呼ばれるクラスのオブジェクトとなります。このPairGridオブジェクトは、グラフを追加して描画するメソッドを持ちます(以下の表を参照)。
メソッド |
描画箇所 |
---|---|
map |
全てのグラフ |
map_offdiag |
対角以外のグラフ |
map_upper |
対角より右上側 |
map_lower |
対角より左下側 |
map_diag |
対角のグラフ |
以下の例では、pairplot
関数で非対角のグラフに散布図をプロットした後、map_lower
メソッドを用いて左下のグラフにカーネル密度推定のグラフを追加しています。
pg = sns.pairplot(df, kind="scatter",
hue="species", vars=["sepal_length", "petal_length"])
pg.map_lower(sns.kdeplot)
<seaborn.axisgrid.PairGrid at 0x2350d22aa50>
グラフの保存#
pairplot
関数で出力したグラフをファイルとして保存するには、pairplot
関数の戻り値 (pg
) のsavefig()
メソッドを使用します。引数に保存するファイル名を与えます。
pg = sns.pairplot(df, vars=["sepal_length", "petal_length"])
pg.savefig("pairplot.png")