一つの調査項目に対して、複数サンプルが調査され、中には同じ値が得られる場合がある。このようなデータを点グラフで表すと、同じ値は同じ所にプロットされる。そのため、点と点が重なってデータの数を確認できなくなる。そこで、このようなデータに微小な値を足したり、引いたりして、本来の値から少しだけずらすことで、点が重ならないような点グラフを描けるようになる。
このような jitter プロットは seaborn ライブラリーの stripplot
メソッドを使用して描ける。入力データとして、Pandas のデータフレーム型のデータを与える。
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
plt.style.use('default')
sns.set()
sns.set_style('whitegrid')
sns.set_palette('Set3')
np.random.seed(2018)
df = pd.DataFrame({
'leaf': np.random.normal(10, 2, 20),
'stem': np.random.normal(15, 3, 20),
'root': np.random.normal(5, 1, 20)
})
df_melt = pd.melt(df)
print(df_melt.head())
## variable value
## 0 leaf 9.446465
## 1 leaf 11.163702
## 2 leaf 14.296799
## 3 leaf 7.441026
## 4 leaf 11.004554
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
sns.stripplot(x='variable', y='value', data=df_melt, jitter=True, color='black', ax=ax)
ax.set_xlabel('tissue')
ax.set_ylabel('dry weight [g]')
ax.set_ylim(0, 20)
plt.show()
複数カテゴリを持つようなデータに対しても同様に jitter プロットを描くことができる。このとき、入力データとして、Pandas のデータフレーム型のデータを与える。
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
plt.style.use('default')
sns.set()
sns.set_style('whitegrid')
sns.set_palette('Set3')
np.random.seed(2018)
# data of Ta (T. aestivum) group
dfTa = pd.DataFrame({
'leaf': np.random.normal(10, 2, 20),
'stem': np.random.normal(15, 3, 20),
'root': np.random.normal(5, 1, 20)
})
# data of At (A. tauschii) group
dfAt = pd.DataFrame({
'leaf': np.random.normal(12, 3, 20),
'stem': np.random.normal(12, 3, 20),
'root': np.random.normal(6, 2, 20)
})
dfTa_melt = pd.melt(dfTa)
dfTa_melt['species'] = 'T. aestivum'
dfAt_melt = pd.melt(dfAt)
dfAt_melt['species'] = 'A. tauschii'
df = pd.concat([dfAt_melt, dfTa_melt], axis=0)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
sns.stripplot(x='variable', y='value', data=df, hue='species', dodge=True,
jitter=True, color='black', palette='Dark2', ax=ax)
ax.set_xlabel('tissue')
ax.set_ylabel('dry weight [g]')
ax.set_ylim(0, 20)
plt.show()