Pynote

Python、機械学習、画像処理について

seaborn - violinplot() でバイオリン図を作成する。

バイオリン図

バイオリン図 とは、箱ひげ図の両脇に90度回転させたカーネル密度グラフを付加した図である。

seaborn で描画する。

基本的な使い方

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

sns.set(style='whitegrid')
tips = sns.load_dataset('tips')

# 支払額のバイオリン図を作成する。
ax = sns.violinplot(x=tips['total_bill'])


カテゴリ変数の値ごとにバイオリン図を作成する。

引数 y にカテゴリ変数名を指定することで、各カテゴリごとにバイオリン図を作成できる。

# 曜日ごとに支払額のバイオリン図を作成する。
ax = sns.violinplot(x='day', y='total_bill', data=tips)


カテゴリ変数の値ごとにバイオリン図を作成する。

引数 hue にカテゴリ変数を指定することで、各カテゴリごとにバイオリン図を作成できる。

# 喫煙の有無を分けて、曜日ごとに支払額のバイオリン図を作成する。
ax = sns.violinplot(x='day', y='total_bill', hue='smoker', data=tips)


hue で指定したバイオリン図のカーネル密度推定結果を結合する。

# 喫煙の有無は2種類のカテゴリ変数なので、結合する。(3種類以上あると、使えない。)
ax = sns.violinplot(x='day', y='total_bill', hue='smoker', data=tips, split=True)


バイオリン図のスケール

# バイオリン図の幅をそのビンの合計のサンプル数に対する割合で決める。
ax = sns.violinplot(x='day', y='total_bill', hue='sex', data=tips,
                    split=True, scale='count')


# バイオリンの幅を合計のサンプル数に対する割合で決める。
ax = sns.violinplot(x='day', y='total_bill', hue='sex', data=tips,
                    split=True, scale='count', scale_hue=False)


分位点を線で描画する。

# バイオリンの分位点を線で描画する。
ax = sns.violinplot(x='day', y='total_bill', hue='sex', data=tips,
                    split=True, inner='quartile')


各サンプル点を線で描画する。

# 各サンプルを線で描画する。
ax = sns.violinplot(x='day', y='total_bill', hue='sex', data=tips,
                    split=True, inner='stick')


カーネル密度推定のバンド幅を設定する。

# カーネル密度推定のバンド幅を指定する。
ax = sns.violinplot(x='day', y='total_bill', hue='smoker', data=tips,
                    split=True, bw=0.5)