Rで箱ヒゲ図を作成し、有意差のマーク(* や n.s)をつけます。
今回は、自分で一本一本線や記号を書き足していく方法を紹介します。
統計計算から、有意差の表示まで自動でやってくれる方法もあります。
手順
- csv file読み込み
- 必要なライブラリの読み込み
- 統計処理を行い, p値などを得る
- ggplotでグラフを書く
- 手動で線やテキストを書き足す
ggplotはレイヤーのように一つ一つの処理を足していくことが可能です。
p <- ggplot (dat) #グラフを書く。変数はplotの”p”
p <- p + geom_text(○○○) #テキストの書き足し
p <- p + geom_segment(○○○) #線の書き足し
p
こんな感じ。。。
Sequence A, B, Cの画質評価を5pointでscaleで行った想定です。
今回はp値などを取得済みの仮定で進めます。
データはこちらから↓↓↓
test_data.csv - Google ドライブ
〜 #ライブラリを読み込み library(ggplot2) library(ggsignif) library(gridExtra) library(ggpubr) library(rstatix) # ファイル読み込み dat <- read.csv("csv_file_path", header=TRUE) # NA の値を消去 dat <- no.omit(dat) #attachで扱いやすく attach(dat) #Sequenceでグループ分け Sequence <- as.factor(Sequence) dat_2<- data.frame (Score, Sequence) # boxplotを表示 p <- ggplot(dat_2 , mapping = aes(x = Sequence, y = Score)) + geom_boxplot(fill = "lightblue") # dotでデータを表示 p <- p + geom_point() #とりあえず確認 p 〜
この時点でこんな感じ
このままだとダサいので色々と調整していく
調整は"p"に処理を足していく形式でかく
いわゆる、レイヤー処理と同様
〜 #点の分布を表示する (今回は離散データなのであまり意味ない) p <- p + geom_point() # y軸を調整する p <- p + ylim(0, 6.5) # x軸の名前を変えてみる(今回は"_"を入れるだけ) p <- p + scale_x_discrete("Images", labels = c("Sequence A" = "Sequence_A", "Sequence B" = "Sequence_B", "Sequence C" = "Sequence_C")) p 〜
ここまででこんな感じ
有意差を示す線やtextを加えていく
〜 # Sequence A - Sequence B間 p <- p + geom_text(x = 1.5, y = 4.6, label = "** p < 0.01", fontface="italic", alpha = 0.7, color = "grey28", size = 6) p <- p + geom_segment(x = 1, xend = 1, y = 4.2, yend = 4.4, alpha = 0.5, color = "grey28") p <- p + geom_segment(x = 1.9, xend = 1.9, y = 4.2, yend = 4.4, alpha = 0.5, color = "grey28") p <- p + geom_segment(x = 1, xend = 1.9, y = 4.4, yend = 4.4, alpha = 0.5, color = "grey28") # Sequence B - Sequence C間 p <- p + geom_text(x = 2.5, y = 5.6, label = "** p < 0.01", fontface="italic", alpha = 0.7, color = "grey28", size = 6) p <- p + geom_segment(x = 2.1, xend = 3, y = 5.4, yend = 5.4, alpha = 0.5, color = "grey28") p <- p + geom_segment(x = 2.1, xend = 2.1, y = 5.2, yend = 5.4, alpha = 0.5, color = "grey28") p <- p + geom_segment(x = 3, xend = 3, y = 5.2, yend = 5.4, alpha = 0.5, color = "grey28") #Sequence A - Sequence C間 p <- p + geom_text(x = 2, y = 6.3, label = "** p < 0.01", fontface="italic", alpha = 0.7, color = "grey28", size = 6) p <- p + geom_segment(x = 1, xend = 3, y = 6, yend = 6, alpha = 0.5, color = "grey28") p <- p + geom_segment(x = 1, xend = 1, y = 5.8, yend = 6, alpha = 0.5, color = "grey28") p <- p + geom_segment(x = 3, xend = 3, y = 5.8, yend = 6, alpha = 0.5, color = "grey28") # 背景のグリッド消し、フォントを調整 p <- p + theme_classic() + theme(text = element_text(size = 20)) p 〜
これで完成(p値はてきとーに書いてます)
その他色々と調整可能です