2013-09-25 105 views
5

我創造了這個情節 enter image description here添加自定義行ggplot barplot

與此代碼:

ggplot(data_long, aes(Trial,value,fill=factor(Trial))) +  
    stat_summary(fun.y=mean,geom="bar") + facet_grid(Task~Gruppo) + labs(x="Trial 
    type",y="Accuracy %") + theme(legend.position="none") 

現在,我需要補充的是顯示值的夫妻之間的差異定製線路。下面是我想要做的(參見前兩個小節線與P = 0.46)的例子:

enter image description here

我不知道解決方案的想法,事情也比較複雜,我,因爲我用facet_grid。 任何人都可以幫助我嗎?

回答

6

首先,由於沒有提供樣本數據,我製作了自己的樣本數據。這些數據已經彙總(有每個級別的每個組合只有一個值。

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 

現在,你需要爲線的位置添加兩個新值。ymin值是原始值加上小常量。ymax值對每個小面(使用TreatmentType作爲分組)中的每個小面y位置計算,它是在小面加上最大值一些常數。

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 

第二數據幀爲標籤製備。下面是再次原始ymax值加上一些常數和lab包含需要顯示的標籤。

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  * 

由於現在df已經總結的值使用geom_bar(stat="identity")代替stat_summary()。額外的行添加了兩個geom_segment()調用 - 第一個繪製垂直線,第二個繪製水平線。 geom_text()在行上添加標籤。

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) 

enter image description here

+0

非常感謝您的耐心,Didzis。這對我來說非常清楚和完整。 –