この記事で使われているバージョンはSeaborn v0.12.2です。
swarmplot, stripplot
公式ドキュメント(※Version 0.12)
https://seaborn.pydata.org/archive/0.12/generated/seaborn.swarmplot.html
https://seaborn.pydata.org/archive/0.12/generated/seaborn.stripplot.html
基本構文
とりあえず基本的の構文。細かい内容は後述します。
swarmplot
sns.swarmplot(data=df_plot,#DataFrameの指定
x='x_value',#X軸にプロットする列名を指定
y='y_value',#Y軸にプロットする列名を指定
hue='[グループ名]',#グループ分けする場合のみ。グループ名が格納されている列名
dodge=True,#hueを指定している場合のみTrue¥
palette='[パレット名]',#hueを指定している場合のみ。カラーパレットを指定。プリセットor自分で設定
#color='black',#hueを指定しない場合の色の指定
size=10,#マーカーサイズの変更
edgecolor='black',#マーカーの枠線の色
linewidth=1,#マーカーの枠線の太さ
alpha=marker_alpha,#マーカーの透過度。0~1.0で指定
marker='^',#マーカーの形状を指定。'^'は三角、'o'は丸
)
striplot
書き方はswarmplotと同じで、頭のところをsns.stripplot(~~)
に変えるだけ。
sns.stripplot(data=df_plot,#DataFrameの指定
x='x_value',#X軸にプロットする列名を指定
y='y_value',#Y軸にプロットする列名を指定
#細かい設定をする
)
swarmplot、stripplotの描画方法
まずは、インポートとデータの読み込み。
csvからの読み込み例。
# ライブラリのインポート
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# データの読み込み
df = pd.read_csv('./data.csv', header=0, index_col=0)
入力データのDataFrameを変換する
Seabornでプロットするには、読み込んだDataFrameを一定の形に変換する必要あり。
詳しくはこちらを参照。
2要素(値、カテゴリ1)のDataFrameの変換
df_sns = df.stack().reset_index()
df_sns.columns=['id', 'x_value', 'y_value']
col_num = len(df.columns)
3要素(値、カテゴリ1、カテゴリ2)のDataFrameの変換
ただし、読み込んだCSVファイル内のデータにおいて、グループの列が一番右列にあってその列名がgroup
になっている前提。
col_num = len(df.columns)-1
df_stack = df.iloc[:, 0:col_num].stack().reset_index()
df_stack.columns = ['id', 'x_value', 'y_value']
df_sns = df_stack.merge(df.loc[:,'group'], left_on='id', right_index=True ,how='left')
プロットする
ここから、実際のプロットに使うコードを記します。
コード
fig = plt.figure(figsize=(6,4))
ax1 = fig.add_subplot(1,1,1)
sns.swarmplot(data=df,
x='day',
y='value',
#color='black'#色の指定,
ax=ax1
)
plt.show()
(※オブジェクト指向で描画するためax
を指定しています。)
hue
とdodge
でグループ分けしてプロットする
左から、
-
hue 指定なし
、dodge 指定なし
-
hue='group'
、dodge 指定なし
-
hue='group'
、dodge=True
コード
fig = plt.figure(figsize=(9,6))
ax1 = fig.add_subplot(1,1,1)
sns.swarmplot(data=df,
x='day',
y='value',
#hue='group',
#dodge=True,
#palette='muted',#hueを指定している場合のみ(color=は使えない)
alpha=0.7,
ax=ax1
)
plt.show()
マーカの変更
-
color='white'
edgecolor="black",linewidth=1,
:白塗りつぶし・黒枠線 -
color='red'
edgecolor="black",linewidth=1,
:白塗りつぶし・赤枠線 -
marker='^'
:三角形形に変更
コード
fig = plt.figure(figsize=(6,4))
ax1 = fig.add_subplot(1,1,1)
sns.swarmplot(data=df,
x='day',
y='value',
color='white',
edgecolor="black",
linewidth=1,
marker='^',
ax=ax1
)
plt.show()
複数色への変更
-
x=
で指定した列をhue=
に指定することで下図のように色分け可能。
コード
fig = plt.figure(figsize=(6,4))
ax1 = fig.add_subplot(1,1,1)
sns.swarmplot(data=df,
x='day',
y='value',
hue='day',
palette=['red', 'blue', 'green'],
alpha=0.7,
edgecolor="black",
linewidth=1,
marker='o',
legend=False,
ax=ax1
)
plt.show()