Đầu tiên, vì dữ liệu mẫu không được cung cấp, tạo dữ liệu mẫu của riêng tôi. Những dữ liệu đã được tóm tắt (chỉ có một giá trị cho mỗi sự kết hợp của các cấp.
set.seed(1)
df<-data.frame(expand.grid(c("Control","Effect"),c("Self","Other"),c("Type1","Type2")),
runif(8,0,1))
colnames(df)<-c("Treatment","Group","Type","value")
df
Treatment Group Type value
1 Control Self Type1 0.2655087
2 Effect Self Type1 0.3721239
3 Control Other Type1 0.5728534
4 Effect Other Type1 0.9082078
5 Control Self Type2 0.2016819
6 Effect Self Type2 0.8983897
7 Control Other Type2 0.9446753
8 Effect Other Type2 0.6607978
Bây giờ bạn cần phải thêm hai giá trị mới cho các vị trí của dòng. ymin
giá trị là giá trị ban đầu cộng với hằng số nhỏ. ymax
giá trị được tính cho mỗi khía cạnh (sử dụng Treatment
và Type
như nhóm) và nó là giá trị tối đa trong khía cạnh cộng với một số không đổi.
library(plyr)
df<-ddply(df,.(Treatment,Type),transform,ymax=max(value)+0.2)
df$ymin<-df$value+0.05
df
Treatment Group Type value ymax ymin
1 Control Self Type1 0.2655087 0.7728534 0.3155087
2 Control Self Type2 0.2016819 1.1446753 0.2516819
3 Control Other Type1 0.5728534 0.7728534 0.6228534
4 Control Other Type2 0.9446753 1.1446753 0.9946753
5 Effect Self Type1 0.3721239 1.1082078 0.4221239
6 Effect Self Type2 0.8983897 1.0983897 0.9483897
7 Effect Other Type1 0.9082078 1.1082078 0.9582078
8 Effect Other Type2 0.6607978 1.0983897 0.7107978
khung dữ liệu thứ hai được thực hiện cho các nhãn. ở mỗi vị trí khía cạnh y là một lần nữa gốc ymax
giá trị cộng với một số hằng số và lab
chứa các nhãn bạn cần hiển thị.
df.names<-ddply(df,.(Treatment,Type),summarise,ymax=ymax[1]+0.1)
df.names$lab<-c("p=0.46","**","***","*")
df.names
Treatment Type ymax lab
1 Control Type1 0.8728534 p=0.46
2 Control Type2 1.2446753 **
3 Effect Type1 1.2082078 ***
4 Effect Type2 1.1983897 *
Như bây giờ df
đã được tóm tắt sử dụng giá trị geom_bar(stat="identity")
thay vì stat_summary()
. Các dòng bổ sung được thêm vào với hai cuộc gọi geom_segment()
- số đầu tiên vẽ các đường thẳng đứng và thứ hai thêm đường ngang. geom_text()
thêm nhãn trên các dòng.
ggplot(df, aes(Group,value,fill=Group)) +
geom_bar(stat="identity") + facet_grid(Type~Treatment) +
theme(legend.position="none")+
geom_segment(aes(x=Group,xend=Group,y=ymin,yend=ymax))+
geom_segment(aes(x="Self",xend="Other",y=ymax,yend=ymax))+
geom_text(data=df.names,aes(x=1.5,y=ymax,label=lab),inherit.aes=FALSE)

nhờ Rất kiên nhẫn của bạn, Didzis. Nó rất rõ ràng và đầy đủ cho tôi. –