新しいよりよいグラフの記事が出ています
【R】t検定を行い、有意差を示すアスタリスク付きのグラフを作成する【改】
こちらをご覧ください。こっちのほうがきれい!!!!!!!!!!!!!
旧文書
1年前に自分用に作った2群間においてt検定を実行して棒グラフを作り,よくあるバーとアスタリスク(*)をつけるRプログラムを載せておく.
これから卒論・修論の時期なので何か役に立つかもしれない.
two_barplot <- function(x, xlab = "", ylab = "", col = NA) {
#testdata
control <- c(3822,4103,4175,3736)
treatment <- c(1063,1082,1385,1487)
xy <- cbind(control, treatment)
#もしCSVで読み込むなら上のブロックをコメントアウト
#csv <- read.csv(x)
#xy <- as.matrix(csv)
#色の指定がなければ以下の色に設定する
if (is.na(col)) {
col <- c("#666666", "#CCCCCC")
}
#変数の設定
sample.labels <- names(xy)
pvalues <- rep(NA, length(sample.labels))
#y軸の上限設定
xmax <- max(xy)
xsd <- sd(xy)
#平均値及び標準偏差の算出
xm <- apply(xy, 2, mean)
xs <- apply(xy, 2, sd)
#Pvalue の算出
pvalues <- t.test(xy[,1], xy[,2])$p.value
#graph size and fonts settings
par(mar =c(5,15,5,15))
par(family = 'sans')
#棒グラフ描写
b <- barplot(xm, beside = TRUE, col = col, border = col, xlab = xlab, ylab = ylab, ylim = c(0, (xmax + 1.1 * xsd)))
#エラーバー描写
arrows(b, xm-xs, b, xm+xs, code=3, lwd = 1, angle = 90, length = 0.1)
#棒グラフを結ぶ線の点
maxy = max(xm + xs) * 1.1
stepy = max(xm +xs) * 0.1
for (i in 1:length(pvalues)) {
xi <- b[, i]
yi <- xm + stepy * 1.5
maxyi <- max(yi) + stepy
if (pvalues[i] < 0.05) {
lines(c(xi[1], xi[1], xi[2], xi[2]), c(yi[1], maxyi, maxyi, yi[2]))
if (pvalues[i] < 0.001) {
text((xi[1] + xi[2]) / 2, maxyi + stepy / 4, "***")
} else if (pvalues[i] < 0.01) {
text((xi[1] + xi[2]) / 2, maxyi + stepy / 4, "**")
} else if (pvalues[i] < 0.05) {
text((xi[1] + xi[2]) / 2, maxyi + stepy / 4, "*")
}
}
}
pvalues
}
上記を実行して関数を読み込ませた上で
two_barplot()
とコマンドに入力してやればp値を返した上でグラフをプロットする.

こんなのが出力される.
正直フォントとか汚いけど簡易的なものならこれで十分だろう.
たしかフォントの設定でかなり苦戦して諦めた記憶が.
念の為書いておくが,エラーバーは標準偏差,アスタリスク(有意差がある場合に記す)の数は
*:p<0.05
**:p<0.01
***:p<0.001
である.分野によって若干異なるかもしれないので注意すること.
複数のバーを一度に表示させる場合は参考にしたこちらのページにやり方が載っている.



![【Qiskit】マルチオミクス解析を量子機械学習でやる①[環境構築・基礎]](https://kimbio.info/wp-content/uploads/2024/05/2203027-100x100.jpg)



