[Python][Seaborn] Swarmplotが便利

Swarmplotの利点

Seabornライブラリのswarmplotがとても便利、というだけの記事。

import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset('iris')
fig, ax = plt.subplots()
sns.swarmplot(x='species', y='sepal_length', data=df, ax=ax)
fig.savefig('sepal_length.jpg', dpi=300)
plt.close(fig)

f:id:cyanatlas:20201010174339j:plain

swarmplotを使うと、同じ値が複数あるときに横にずらして並べてくれるので、全体的な傾向が分かりやすい。

この図の場合、sepal_length(花のがくの長さ)の平均は、setosa種<versicolor種<virginica種、という傾向にありそうだが、同時に分散も大きくなっていそうだというのが見てとれる。

Swarmplotの限界

ただしswarmplotにも限界はあって、同じ値を持つデータ数が多くなりすぎると、横にずらすスペースがなくなって、最終的に重なってしまう。

下の図は、先程のデータセットを使ってpetal_length(花弁の長さ)をプロットしたもの。

f:id:cyanatlas:20201010175148j:plain

左のsetosa種では似たような値が多いために、横の方で複数の点が重なってしまっている。そうなると、頻度が分かりにくくなり、swarmplotを使う利点は小さくなる。

もしswarmplotで綺麗に描けないくらい値の似たデータが多いなら、カテゴリごとにヒストグラムを描いて並べるのが良いだろう。ただその場合は、ヒストグラムの切り方(bins)に注意を払う必要がある。