2013-04-29 6 views
7

मैं ggplot2 का उपयोग करके बार चार्ट बनाना चाहता हूं, जिसमें बार (पुरुष, महिला) और समूह (अध्ययन 1, अध्ययन) दोनों के लिए धुंधले समूह और धुरी लेबल के साथ एक बार चार्ट बनाना है। 2 ...)। यहाँ कैसे मैं अपने चार्ट देखने के लिए चाहते हैं:प्रत्येक बार के लिए एक्सिस लेबल और बार समूह में प्रत्येक समूह को डुबकी समूहों के साथ

enter image description here

और कुछ आर कोड। इस मामले में, केवल अक्ष अक्ष पर लेबल किए जाते हैं (समूह के भीतर बार नहीं)। धुरी में बार लेबल मूल रूप से पौराणिक कथाओं को प्रतिस्थापित करते हैं।

x  = runif(8) 
gender = factor(c("male","female","male","female","male","female","male","female")) 
group = c(0,0,1,1,2,2,3,3) 
df  = data.frame(x,gender,group) 

ggplot(df,aes(x=group,y=x,fill=gender)) + 
    geom_bar(stat="identity",position="dodge") + 
    scale_x_continuous("",breaks=c(0:3), 
     labels=c('G1','G2','G3','G4')) 

enter image description here

उत्तर

8

this SO question पर @Sandy Muspratt जवाब से प्रेरित होकर।

सबसे पहले, ऑब्जेक्ट प्लॉट के रूप में बनाएं और सहेजें, जिसमें कोई अक्षांश नहीं है और Female या Male पर 0 अक्ष3 लेबलके साथ एक्स अक्ष लेबल बदलना है। theme() में plot.margin= के साथ साजिश के तहत अतिरिक्त स्थान जोड़ें।

library(ggplot2) 
library(gridExtra) 
p<-ggplot(df,aes(x=group,y=x,fill=gender)) + 
    geom_bar(stat="identity",position="dodge") + 
    scale_x_continuous("",breaks=c(-0.25,0.25,0.75,1.25,1.75,2.25,2.75,3.25), 
        labels=rep(c("Female","Male"),times=4))+ 
    theme(legend.position="none")+ 
    theme(plot.margin = unit(c(1,2,3,1), "lines")) 
कार्यों annotation_custom() साथ

अब और textGrob() भूखंड की स्थापना x और y निर्देशांक (नकारात्मक निर्देशांक y साजिश के तहत लेबल डालता के लिए) के तहत लेबल Study 1, Study 2 जोड़ें।

p1<-p+annotation_custom(grob=textGrob("Study 1"), 
          xmin=0,xmax=0,ymin=-.2,ymax=-0.2)+ 
     annotation_custom(grob=textGrob("Study 2"), 
          xmin=1,xmax=1,ymin=-.2,ymax=-0.2)+ 
     annotation_custom(grob=textGrob("Study 3"), 
          xmin=2,xmax=2,ymin=-.2,ymax=-0.2)+ 
     annotation_custom(grob=textGrob("Study 4"), 
          xmin=3,xmax=3,ymin=-.2,ymax=-0.2) 

यह सुनिश्चित करने के नए लेबल साजिश रची है, तो आप वस्तु grobs के लिए और फिर को निष्क्रिय कतरन भूखंड कन्वर्ट चाहिए।

gt <- ggplot_gtable(ggplot_build(p1)) 
gt$layout$clip[gt$layout$name=="panel"] <- "off" 
grid.draw(gt) 

enter image description here

संबंधित मुद्दे