[英]Annotating text on individual facets in ggplot2 #2
我在ggplot2中的各個方面注釋文本時也遇到了一些麻煩(參考相關文章: ggplot2中的各個方面注釋文本 )。
數據框:
str(cfit_2)
'data.frame': 186 obs. of 5 variables:
$ Participant: Factor w/ 31 levels "2","3","4","5",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Condition : Factor w/ 2 levels "Active control group",..: 1 2 2 2 1 1 2 2 1 1 ...
$ Time : Factor w/ 2 levels "Pretest","Posttest": 1 1 1 1 1 1 1 1 1 1 ...
$ CFIT : num 10 13 17 11 19 15 19 11 15 16 ...
$ Version : Factor w/ 3 levels "Total CFIT","CFIT version 1",..: 1 1 1 1 1 1 1 1 1 1 ...
碼:
p<-ggplot(cfit_2,aes(Time,CFIT,fill=Condition))+
scale_y_continuous(breaks=1:20)+
scale_fill_manual(values=c("white","lightgrey"))+
geom_violin()+
theme_classic()+
coord_cartesian(ylim=c(1, 20),xlim=c(1, 2))+
theme(axis.line=element_blank())+
facet_grid(.~Version)+ylab("CFIT raw score")+
geom_segment(x=.3925,xend=.3925,y=1,yend=20)+
geom_segment(x=1,xend=2,y=.015,yend=.015)+
stat_summary(fun.y=mean,geom="point",position=position_dodge(w=.9))+
stat_summary(fun.data=mean_cl_boot,geom="errorbar",position=position_dodge(w=.9),width=0)+
geom_segment(data=data.segm_1,aes(x=x,xend=xend,y=y,yend=yend),inherit.aes=FALSE)+
geom_segment(data=data.segm_2,aes(x=x,xend=xend,y=y,yend=yend),inherit.aes=FALSE)+
geom_segment(data=data.segm_3,aes(x=x,xend=xend,y=y,yend=yend),inherit.aes=FALSE)+
geom_segment(data=data.segm_1_2,aes(x=x,xend=xend,y=y,yend=yend),inherit.aes=FALSE)+
geom_segment(data=data.segm_2_2,aes(x=x,xend=xend,y=y,yend=yend),inherit.aes=FALSE)+
geom_segment(data=data.segm_3_2,aes(x=x,xend=xend,y=y,yend=yend),inherit.aes=FALSE)
我想做的是在每個句段旁邊添加“ NS”或“ *”。 使用以下數據框:
ann_text<-data.frame(Time=c("Pretest","Posttest","Pretest","Posttest","Pretest","Posttest"),CFIT=c(8,7,3,2,2,3),
lab=c("NS","*","NS","*","NS","*"),
Version=factor(c("Total CFIT","Total CFIT","CFIT version 1","CFIT version 1","CFIT version 2","CFIT version 2"),
levels=c("Total CFIT","CFIT version 1","CFIT version 2")))
ann_text:
Time CFIT lab Version
1 Pretest 8 NS Total CFIT
2 Posttest 7 * Total CFIT
3 Pretest 3 NS CFIT version 1
4 Posttest 2 * CFIT version 1
5 Pretest 2 NS CFIT version 2
6 Posttest 3 * CFIT version 2
...我從p + geom_text(data = ann_text,aes(label = lab))得到以下結果:
**Error in eval(expr, envir, enclos) : object 'Condition' not found**
將aes(fill = Condition)移至geom_violin()可以得到以下曲線:
最簡單的方法是通過將geom_text
設置為NULL
來告訴geom_text
不要使用Condition
進行填充。 這樣,您可以繼續fill
ggplot
調用,並將其應用於所有其他geoms
,而無需每次都指定它。
cfit_2 <- data.frame(
Time = c('Pretest', 'Posttest'),
Condition = rep(c('Active control group', 'Training group'), each = 2),
Version = rep(c('Total CFIT', 'CFIT version 1', 'CFIT version 2'), each = 40),
CFIT = rnorm(120, 10, 3)
)
p<-ggplot(cfit_2,aes(Time,CFIT,fill=Condition))+
#scale_y_continuous(breaks=1:20)+
scale_fill_manual(values=c("white","lightgrey"))+
geom_violin()+
theme_classic()+
#coord_cartesian(ylim=c(1, 20),xlim=c(1, 2))+
theme(axis.line=element_blank())+
facet_grid(.~Version)+ylab("CFIT raw score")+
geom_segment(x=.3925,xend=.3925,y=1,yend=20)+
geom_segment(x=1,xend=2,y=.015,yend=.015)+
stat_summary(fun.y=mean,geom="point",position=position_dodge(w=.9))+
stat_summary(fun.data=mean_cl_boot,geom="errorbar",position=position_dodge(w=.9),width=0)
(請注意,我在軸上注釋了兩行,因為它們給我帶來了麻煩。我還刪除了帶注釋的行,因為您沒有提供這些數據。)
首先在需要星號和“ NS”的位置創建坐標。
ann_text<-read.table(text="
Time CFIT lab Version
Pretest 15 NS 'Total CFIT'
Posttest 7 * 'Total CFIT'
Pretest 3 NS 'CFIT version 1'
Posttest 2 * 'CFIT version 1'
Pretest 2 NS 'CFIT version 2'
Posttest 3 * 'CFIT version 2'
",header=T)
然后注釋。
p + geom_text(data = ann_text, aes(label = lab, fill = NULL))
當然,文本看起來不太好(y級別錯誤),但這是因為我的數據不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.