(2021.7.2修正 データフレームを2つ使用してプロットを重ねる手法を示していましたが、ggplotのstat_summaryで求めた統計値を用いる手法に変更しています)
近年、生物科学分野ではデータの透明性が求められており、実験結果の平均値や分布を示す棒グラフとエラーバーだけではなく、個別データをプロットした図が求められるようになりました。
こういった図はGraphPad Prism (https://www.graphpad.com) などのアプリケーションを使用すれば比較的容易に描くことができますが、有料ですし、使用できるとしても研究室の共用端末でしか使用できないことも多いでしょう。
本記事ではRのggplotを使用し、下記のような棒グラフ+エラーバー+ドットプロットを描出する手法ついて述べます。
本記事の手法では、可能な限りそのまま論文に使用できるビジュアルにすることを目指しました。
準備
まずパッケージを読み込みます。
library(ggplot2)
今回使用するテストデータを作成します。
野生型(WT)とノックアウト(KO)の測定値(value)として、次のようなデータフレームがあるとします。
# シードを固定
set.seed(1234)
# factor型で並び順を指定
genotype <- factor(c(rep("WT", 10), rep("KO", 10)),
level = c("WT", "KO"))
# 正規分布乱数生成。KO群の平均値と標準偏差を大きめに設定
value <- c(rnorm(10, mean = 10, sd = 2),
rnorm(10, mean = 15, sd = 3))
# データフレーム作成
df <- data.frame(genotype = genotype,
value = value)
df
図の描出
p <- ggplot(df, aes(x = genotype, y = value, fill = genotype))+
# stat_summaryで得られた平均値を用いて棒グラフを描出
stat_summary(fun = "mean", geom = "bar", width = .6) +
scale_fill_manual(values = c("lightgrey", "darkgrey"))+
# stat_summary で得られた平均値と標準偏差を用いてエラーバーを描出
stat_summary(fun.max = function(x) mean(x) + sd(x),
fun.min = function(x) mean(x) - sd(x),
geom = 'errorbar', width = .3)+
# dfの個別データをドットプロットで描出
geom_jitter(aes(shape = genotype), width = .2, size = 3)+
# y軸の範囲を設定、プロット領域の拡張をゼロに設定することで棒グラフが浮かないようにする
scale_y_continuous(expand = c(0, 0), limits = c(0, max(df$value)*1.5))+
# 体裁を整える。classicだけではいくつかの部品の色が黒ではないため、修正。凡例はお好みで。
theme_classic()+
theme(axis.title = element_text(size = 10),
axis.text = element_text(size = 10, color = "black"),
axis.ticks = element_line(color = "black"),
legend.position = "none")+
# ラベル
labs(x = NULL, y = "value")
p
少し上にスペースを広めにとっているのは必要に応じて凡例やP値などを追加するためです。
図の保存
作成した図を保存します。PDFをIllustratorで読み込めば、埋め込み後に部品にバラして体裁を整えることが可能です。
ggsave("plot.pdf", p)
まとめ
本記事はggplotを用いて棒グラフ+エラーバー+ドットプロットを描く方法を示しました。より良い方法があればぜひフィードバックをいただけると幸いです。