2013-09-25 9 views
5

में कस्टम लाइनों जोड़े मैं इस कोड के साथ इस साजिश enter image description hereggplot 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") 

अब, मुझे लगता है कि मूल्यों के जोड़ों के बीच अंतर दिखाने कस्टम लाइनों को जोड़ने के लिए की जरूरत है।

enter image description here

मैं समाधान के बारे में पता नहीं है, और चीजों के बाद से मैं प्रयोग किया जाता है मेरे लिए और अधिक जटिल भी कर रहे हैं: यहाँ मैं क्या करना (पी के साथ पहले दो बार देखना = 0.46) क्या चाहते का एक उदाहरण है 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 मूल्य प्रत्येक पहलू y स्थिति में प्रत्येक पहलू (Treatment और Type ग्रुपिंग के रूप में उपयोग करते हुए) के लिए गणना की जाती है और यह पहलू में अधिक से अधिक मूल्य के साथ साथ कुछ स्थिर है।

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 पहले से ही सारांशित किया गया है मूल्य उपयोग stat_summary() के बजाय geom_bar(stat="identity")। अतिरिक्त लाइनों को दो geom_segment() कॉल के साथ जोड़ा जाता है - पहले एक प्लॉट लंबवत रेखाएं और दूसरा क्षैतिज रेखा जोड़ता है। geom_text() लाइनों के ऊपर लेबल जोड़ता है। आपके धैर्य, Didzis के लिए

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

बहुत धन्यवाद। यह मेरे लिए बहुत स्पष्ट और पूर्ण है। –