【Seaborn】relplotによる2変数間の関係の可視化#
※記事内に商品プロモーションを含むことがあります。
公開日
Seabornのrelplot
関数は、散布図または折れ線グラフによって、2変数間の関係を可視化する機能を持っています。この記事では、relplot
関数の使用方法とオプションについて解説します。
relplot関数の基本#
まず、relplot
関数でプロットするデータとして、tipsデータセットを取得します。
import seaborn as sns
df = sns.load_dataset("tips")
df
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
... | ... | ... | ... | ... | ... | ... | ... |
239 | 29.03 | 5.92 | Male | No | Sat | Dinner | 3 |
240 | 27.18 | 2.00 | Female | Yes | Sat | Dinner | 2 |
241 | 22.67 | 2.00 | Male | Yes | Sat | Dinner | 2 |
242 | 17.82 | 1.75 | Male | No | Sat | Dinner | 2 |
243 | 18.78 | 3.00 | Female | No | Thur | Dinner | 2 |
244 rows × 7 columns
tipsデータセットは以下の7変数を持ち、データ数は244個です。
total_bill: 食事の代金(USドル)
tip: チップの額(USドル)
sex: 性別
smoker: 喫煙者か否か
day: 曜日(木曜~日曜のいずれか)
time: 食事の時間(昼食または夕食)
size: 人数
これをrelplot
関数でプロットします。引数data
にDataFrameを与え、x
, y
にそれぞれx, y軸に表示したい変数を与えます。
sns.relplot(data=df, x="total_bill", y="tip")
<seaborn.axisgrid.FacetGrid at 0x18ad2c88470>

このように2変数の関係が散布図としてプロットされます。
relplot
関数の主なオプションを以下に示します。
オプション |
型 |
説明 |
---|---|---|
x/y |
str |
x, y軸の変数 |
kind |
str |
グラフの種類。 |
hue |
str |
色分けをするカテゴリ変数名 |
hue_order |
list of str |
hueの順番 |
palette |
dict/str |
hueの色を指定。カラーマップも指定可能 |
size |
str |
散布図のマーカーサイズに対応させる変数名 |
style |
str |
散布図のマーカー種類や、折れ線グラフの線の種類を変更する変数名 |
row |
str |
複数グラフに分割するときに、縦方向のキーとなる変数名 |
col |
str |
複数グラフに分割するときに、横方向のキーとなる変数名 |
row_order |
list of str |
rowオプションの順序を指定 |
col_order |
list of str |
colオプションの順序を指定 |
col_wrap |
int |
rowを指定したときの1行あたりのグラフの数 |
height |
float |
各グラフの高さ |
aspect |
float |
|
変数による色分け#
hue
オプションに変数を指定することにより、変数の値ごとに色分けされたグラフが出力されます。
sns.relplot(data=df, x="total_bill", y="tip", hue="day")
<seaborn.axisgrid.FacetGrid at 0x18ad336b470>

palette
オプションでは、カテゴリ変数ごとの色を指定できます。指定方法は2つあります。1つは辞書形式で、変数ごとに色の名前を指定します。
sns.relplot(data=df, x="total_bill", y="tip", hue="day",
palette={"Thur": "red",
"Fri": "blue",
"Sat": "green",
"Sun": "orange"})
<seaborn.axisgrid.FacetGrid at 0x18ad33a7ad0>

もう1つの方法は、カラーマップの名前を与える方法です。指定可能なカラーマップについては以下のページを参照下さい。
sns.relplot(data=df, x="total_bill", y="tip", hue="day",
palette="Blues")
<seaborn.axisgrid.FacetGrid at 0x18ad552c740>

また、hue
オプションには、カテゴリ変数だけでなく数値変数を与えることも可能です。size
(人数)で色分けした例を示します。
sns.relplot(data=df, x="total_bill", y="tip", hue="size")
<seaborn.axisgrid.FacetGrid at 0x18ad55440b0>

マーカーのサイズ#
size
オプションに数値データ名を与えると、数値の大きさに応じてマーカーのサイズが変化します(※以下の例では、size
オプションに与えた"size"
はDataFrameの列名の"size"
(人数
)のことです)。
sns.relplot(data=df, x="total_bill", y="tip", size="size")
<seaborn.axisgrid.FacetGrid at 0x18ad54f3080>

マーカーの種類#
style
オプションに変数を指定することにより、変数の値ごとにマーカーの種類が異なるグラフが出力されます。style
オプションとhue
オプションを併用することも可能です。
sns.relplot(data=df, x="total_bill", y="tip", style="day")
<seaborn.axisgrid.FacetGrid at 0x18ad33e3470>

sns.relplot(data=df, x="total_bill", y="tip",
style="time", hue="day")
<seaborn.axisgrid.FacetGrid at 0x18ad5ad3080>

複数グラフへ分割#
row
, col
オプションに変数名を渡すことにより、その変数の値でデータを分割し、縦・横方向にグラフを並べてプロットします。row
オプションに"time"
(食事の時間)を渡して、グラフを縦方向に分割した例を以下に示します。
sns.relplot(data=df, x="total_bill", y="tip", row="time")
<seaborn.axisgrid.FacetGrid at 0x18ad5b57920>

col
オプションに"smoker"
(喫煙者か否か)を渡して、グラフを横方向に分割した例を以下に示します。
sns.relplot(data=df, x="total_bill", y="tip", col="smoker")
<seaborn.axisgrid.FacetGrid at 0x18ad6e4af60>

row
, col
オプションを同時に使用することも可能です。その場合、グラフは縦・横の両方向に分割されます。
sns.relplot(data=df, x="total_bill", y="tip",
row="time", col="smoker")
<seaborn.axisgrid.FacetGrid at 0x18ad75340b0>

折れ線グラフ#
relplot
関数のkind
オプションを"line"
とすることにより、折れ線グラフとしてプロットできます。ここでは、fmriというデータセットを用います。
fmri = sns.load_dataset("fmri")
fmri
subject | timepoint | event | region | signal | |
---|---|---|---|---|---|
0 | s13 | 18 | stim | parietal | -0.017552 |
1 | s5 | 14 | stim | parietal | -0.080883 |
2 | s12 | 18 | stim | parietal | -0.081033 |
3 | s11 | 18 | stim | parietal | -0.046134 |
4 | s10 | 18 | stim | parietal | -0.037970 |
... | ... | ... | ... | ... | ... |
1059 | s0 | 8 | cue | frontal | 0.018165 |
1060 | s13 | 7 | cue | frontal | -0.029130 |
1061 | s12 | 7 | cue | frontal | -0.004939 |
1062 | s11 | 7 | cue | frontal | -0.025367 |
1063 | s0 | 0 | cue | parietal | -0.006899 |
1064 rows × 5 columns
timepointというラベルには、同じ値のデータが複数個含まれています。fmriを折れ線グラフとしてプロットします。
sns.relplot(data=fmri, x="timepoint", y="signal", kind="line")
<seaborn.axisgrid.FacetGrid at 0x18ad7a2b470>

薄い水色の区間は、95%信頼区間 (Confidence interval, CI) を示します。
散布図の場合と同様に、折れ線グラフでもhue
, style
, col
, row
オプションなどにより、データを分割してプロットすることが可能です。
sns.relplot(data=fmri, x="timepoint", y="signal",
kind="line", hue="event")
<seaborn.axisgrid.FacetGrid at 0x18ad7f3c0b0>

sns.relplot(data=fmri, x="timepoint", y="signal",
kind="line", style="event")
<seaborn.axisgrid.FacetGrid at 0x18ad7fb0e60>

グラフの保存#
relplot
関数で出力したグラフをファイルとして保存するには、relplot
関数の戻り値 (rg
) のsavefig()
メソッドを使用します。引数に保存するファイル名を与えます。
rg = sns.relplot(data=fmri, x="timepoint", y="signal", kind="line")
rg.savefig("relplot.png")
