右の図みたいに
いくつかの種に対してGLM等で得られた推定値と95%信頼区間を比較できる図を作りたいと思ったので作った。
・Rのggplot2にて描画
・とりあえず描画できればいいだろと思い、スクリプトは雑
・geom_pointrangeってのを使うとできる
・95%信頼区間の計算が別途必要
下みたいなデータセットがあればいける。
|
なぜか枠線が消えてるけど気にしない
なければ下のをRで読み込めばok
#適当なデータフレームを作る準備(あまり重要ではない)
nam<-rep(c("種A", "種B", "種C"),each=3)
fac <- rep(c("mowing", "grazing", "fire"),3)
est <- c(0.2090, 0.7708, 0.8621, 1.8593, 1.1811, 0.3572, 1.9794, -0.0081, 0.0986)
SE <- c(0.4691, 0.4342, 0.4810, 0.8313, 0.5461, 0.4326, 0.7334, 0.4374, 0.4196)
pvl <-c(0.6559, 0.0758, 0.0730, 0.0253, 0.0305, 0.4090, 0.0069, 0.9850, 0.8141)
aaa <-c("","","","*","*","","**","","")
sig <-c("no","no","no","yes","yes","no","yes","no","no")
ord <-rep(c(1,2,3),each=3)
#データフレーム作成
df <-data.frame(name=nam,factor=fac,estimate=est, SE=SE, p_value=pvl, a=aaa, signif=sig, order=ord)
#95%信頼区間の範囲をデータフレームに追加
# 自由度dfと区間pを決めるとqt値ってのが返ってくる。→詳細(外部リンク)
qt<-qt(df=32, p=0.95)
# 信頼区間の最大値の列を追加
df$max<-df$estimate+df$SE*qt
# 信頼区間の最小値の列を追加
df$min<-df$estimate+df$SE*-qt
#推定値とアスタリスクを1つの文字としてまとめる
df$est_round <- paste(round(df$estimate, digits=2), df$a) # round()で推定値を丸める
#データフレームの確認
df #たぶん上の表みたいになってると思う
#読み込みます
library(ggplot2)
#描画します
f<-ggplot()+
#推定値0のところに灰色の破線を描画.
geom_hline(yintercept = 0, linetype=2, col="grey50")+
#後で90度回転させるからx軸に種名、y軸に推定値とか信頼区間の最大値・最小値を指定、x軸は何も指定しないと五十音順なのでreorder()で意味ある順序に.
geom_pointrange(data = df, aes(x = reorder(x = name, X = -order), y = estimate, ymin = min, ymax = max, col = signif))+
#ラベルの追加.vjustで高さ合わせ.
geom_text(data = df,aes(x = name, y = estimate, label = est_round), size = 4, vjust = -1) +
#90度回転
coord_flip()+
#今回は複数の要因があるので要因ごとに分けて描画. ※1要因ならいらない.
facet_wrap(~ factor)+
#x軸ラベル
xlab(' ')+
#y軸ラベル
ylab('Estimate')+
#グラフをシンプルにしたいなら.
theme_classic( )+
#凡例の場所"top","bottom","right","left"とか、今回はなし。
theme(legend.position = "none",
#facet_wrap()で出てくるフレームの枠線色と背景色の設定.
strip.background = element_rect(color = "white", fill = "snow3"),
#factorの文字の大きさの設定.
strip.text.x = element_text(size = 11),
#種名の文字の設定.
axis.text.y = element_text(colour = "black", size = 11),
#"Estimate"って文字の設定.
axis.text.x = element_text(colour = "black", size = 11))+
#col=で設定した色の指定(geom_pointrangeの中で設定してる).
scale_color_manual(values = c("snow3", "black"))
#出力
f
下図のようなものが出力される。
以上
コメントをお書きください