ジッタープロットとは何か
最近は箱ひげ図に実測値を表すプロットを載せた図が掲載されることも多いですよね。
特によく見るのはこのジッタープロットというものですね。同じ数値、あるいは非常に近い数値があった場合にも認識しやすいように、水平方向(x軸方向)にランダムに配置されているので、とても見やすいです。
今回はこのジッタープロットの描き方についてまとめたいと思います。


そうそう、こういうグラフね。箱ひげ図によく乗せてプロットされていますよね。

平均値とエラーバーを単に載せただけでは、失われたデータが多いからね。
ジッタープロットを見れば、データの最大値、最小値、ばらつきの程度なんかも分かりやすいよね。

エラーバーも標準偏差と標準誤差を使い分けられているか怪しい人いるよな。
「誠実な見せ方」が大切だって早く気づきなさいよ。
基本のジッタープロット
まずは基本のジッタープロットです。使用データはRに元々入っている”iris”を使っています。
ちなみにプロットは、グラフを生成するたびにx軸方向の位置が変わります(毎回ランダムに設定されるみたいです)。ですので、同じコードで同じグラフを描画してもまいかいプロットのx軸方向の位置が異なるのです。
塗り分けの指定をしていないので、モノクロでの作成になっています。
ggplot(data = iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot()+
geom_jitter()+ #ジッタープロットを追加
xlab("Species")+ylab("Sepal length")+
theme(text = element_text(size = 24)) #軸ラベルサイズを24に指定

ジッタープロットを色々カスタマイズ
プロットの色を変更する
まずはじめに、プロットの色(点の色)を変更してみましょう。色の配置はggplot2の初期設定です。
colour = Species はSpeciesによって色を変える(Speciesによって塗り分ける)、という指示です。
なお、十分良い感じに仕上がっています。

個人的にはこの初期設定のカラーパレットが好きなんだよな。
ggplot(data = iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot()+
geom_jitter(aes(colour = Species))+ #ジッタープロットを追加
xlab("Species")+ylab("Sepal length")+
theme(text = element_text(size = 24)) #軸ラベルサイズを24に指定

ジッタープロットのサイズや色、塗りつぶしの透過度を変更する
では、ジッタープロットの点のサイズや色、塗りつぶしの色の透過度を変更してみたいと思います。
ggplot(data = iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot()+
geom_jitter(aes(colour = Species), alpha = 0.8, size = 3, width = 0.1)+ #ジッタープロットを追加
xlab("Species")+ylab("Sepal length")+
theme(text = element_text(size = 24)) #軸ラベルサイズを24に指定

geom_jitter 内のalphaを指定することで塗りつぶしの透過度を設定できます。1に設定すると完全に塗りつぶし(つまり透過度0)になります。この例のようにalpha=0.8とすると若干ですがジッタープロットが透ける形になります。
また、geom_jitter 内のwidthを指定することでジッタープロットの横の広がりを調節することができます。上の例のように、width=0.1とすると結構細めになりますね。
箱ひげ図のボックスの色も変えてみる
今度は、箱ひげ図のボックスの色を変えてみます。
geom_boxplot内のcolourをSpeciesに指定することで、ボックスの枠の色をSpeciesによって変えています。このように、ジッタープロットと箱ひげ図をそれぞれ別に塗り分け指定ができます。
ggplot(data = iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot(aes(colour = Species))+
geom_jitter(aes(colour = Species), alpha = 1, size = 2, width = 0.1)+ #ジッタープロットを追加
xlab("Species")+ylab("Sepal length")+
theme(text = element_text(size = 24)) #軸ラベルサイズを24に指定

色々いじって仕上げてみる
カラーパレットでジッタープロットの色を調節してみる
色々いじって個人的に仕上げてみました。ボックスは黒い線で示し、ジッタープロットを色分けするのが個人的には最も綺麗だと思っています。
最初の行のthme_setでtheme_testを指定するとこのような感じで、余計な背景のないすっきりした雰囲気のグラフにできます。
ggplotで初期設定されるグレーの背景のグラフも個人的にはかなりのお気に入りなのですが、背景に線が入っているのがあまり好きではない人もいますので、やり方は知っていても良いかなと思います。
とにかく色々な部分を調整して個人的に好きな感じに仕上げてみました。以下に示したコードに色々な設定のやり方が書いてありますので、必要に応じて参考にしてください。とにかくやってみると色々分かってきます。論文に掲載するにも基本はこのような雰囲気が良いのではないでしょうか。
theme_set(theme_test()) #テーマをtheme_testに設定
ggplot(data = iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot(aes(alpha = 1), width = 0.5, outlier.colour = NA)+ #ヒゲの延長線上にある外れ値を描画しない
geom_jitter(aes(colour = Species), alpha = 1, size = 2, width = 0.2)+ #ジッタープロットを追加
xlab("Species")+ylab("Sepal length")+
stat_summary(fun = mean, geom = "point", color = "black", pch = 4, size = 5) +
theme(legend.position = "none")+#凡例の位置を変更(凡例を消す)
theme(panel.background = element_rect(fill = "white", colour = "black", size = 1))+
theme(axis.ticks.length.x = unit(3, "mm"),
axis.ticks = element_line(color = "black", size = 1))+ #x軸のメモリサイズを変更
theme(axis.ticks.length.y = unit(3, "mm"),
axis.ticks = element_line(color = "black", size = 1)) + #y軸のメモリサイズを変更
theme(axis.text = element_text(size = 24,colour = "black"))+#x軸y軸のテキストサイズを24に指定
theme(text = element_text(size = 24))+ #軸ラベルサイズを24に指定
scale_color_brewer(palette = "Set2") #カラーパレットは"Set2"を指定

Y軸のスタートを0(原点)からに設定してみる
何も設定しない場合、Y軸の視点は自動的に決められてしまいます。
「グラフにおいて軸はすべからく原点から表示すべきだ」という指摘をする人もいますよね。世代が異なれば当然、作図に対する姿勢も異なります。特にRで作った図は初期設定のままだと使いづらいかもしれません。
また、カラーパレットをscale_color_brewer()で指定しています。これが結構便利です。
以下に設定方法を示しますので、必要であればご確認ください。
theme_set(theme_test()) #テーマをtheme_testに設定
ggplot(data = iris, aes(x = Species, y = Sepal.Length)) +
geom_boxplot(aes(alpha = 1), width = 0.5, outlier.colour = NA)+ #ヒゲの延長線上にある外れ値を描画しない
geom_jitter(aes(colour = Species), alpha = 1, size = 2, width = 0.2)+ #ジッタープロットを追加
xlab("Species")+ylab("Sepal length")+
stat_summary(fun = mean, geom = "point", color = "black", pch = 4, size = 5) +
theme(legend.position = "none")+#凡例の位置を変更(凡例を消す)
theme(panel.background = element_rect(fill = "white", colour = "black", size = 1))+
scale_y_continuous(breaks=seq(0,10,length=6),limits=c(0,10))+
theme(axis.ticks.length.x = unit(3, "mm"),
axis.ticks = element_line(color = "black", size = 1))+
theme(axis.ticks.length.y = unit(3, "mm"),
axis.ticks = element_line(color = "black", size = 1)) +
theme(axis.text = element_text(size = 20,colour = "black"))+#x軸y軸のテキストサイズを24に指定
theme(text = element_text(size = 24))+ #軸ラベルサイズを24に指定
scale_color_brewer(palette = "Set1") #カラーパレットは"Set1"を指定

まとめ
箱ひげ図はもともと情報量の多いグラフなのだと思いますが、最近はきちんと実測点を示すように言われることも増えてきました。
個人的にこのジッタープロットは、初めて見たときからカッコいいなと思っていて、私自身も最近は多用しています。論文でもよく見ますよね。
ggplot2でジッタープロットの作図に挑戦したい方の参考になればうれしいです。


