2012-10-24 6 views
10

मेरे पास एक डेटासेट है जहां अलग-अलग समूहों के लिए अलग-अलग दिनों में माप किए जाते हैं।geom_bar में चकमा कैसे करें geom_errorbar में dodge के साथ सहमत हैं, geom_point

मैं अलग-अलग समूहों के लिए अलग-अलग समूहों के लिए अलग-अलग समूहों के लिए अलग-अलग समूहों के लिए अलग-अलग समूहों के साथ मापने के लिए मापने के दिन के अनुसार माप के दिन के अनुसार मापने के पक्ष में पक्षों का प्रतिनिधित्व करना चाहता हूं।

मुझे geom_bar में डोडिंग बनाने में परेशानी हो रही है geom_errorbar पर चकमा से सहमत हैं।

यहाँ कोड का एक सरल टुकड़ा है:

days   = data.frame(day=c(0,1,8,15)); 
groups  = data.frame(group=c("A","B","C","D", "E"), means=seq(0,1,length=5)); 


my_data  = merge(days, groups); 


my_data$mid = exp(my_data$means+rnorm(nrow(my_data), sd=0.25)); 
my_data$sigma = 0.1; 


png(file="bar_and_errors_example.png", height=900, width=1200); 
plot(ggplot(my_data, aes(x=day, weight=mid, ymin=mid-sigma, ymax=mid+sigma, fill=group)) + 
    geom_bar  (position=position_dodge(width=0.5))         + 
    geom_errorbar (position=position_dodge(width=0.5), colour="black")     + 
    geom_point (position=position_dodge(width=0.5), aes(y=mid, colour=group))); 
dev.off(); 

कथानक में errorsegments वाले एक निश्चित इसके बार से ऑफसेट दिखाई देता है (क्षमा करें, कोई भूखंडों newbies भले ही ggplot2 अधीन है के लिए अनुमति दी)।

जब geom_bar में बिनविड्थ समायोजित किया जाता है, ऑफसेट तय नहीं होता है और दिन-प्रतिदिन में परिवर्तन होता है।

नोटिस, geom_errorbar और geom_point टंडेम में चकमा। मैं अन्य दो के साथ सहमत होने के लिए geom_bar कैसे प्राप्त करूं?

किसी भी मदद की सराहना की।

उत्तर

12

संरेखण की समस्याएं आपके हिस्सों में आपके इच्छित डेटा का प्रतिनिधित्व नहीं करती हैं। निम्नलिखित लाइनों सही ढंग से:

ggplot(my_data, aes(x=day, weight=mid, ymin=mid-sigma, ymax=mid+sigma, fill=group)) + 
    geom_bar  (position=position_dodge(), aes(y=mid), stat="identity") + 
    geom_errorbar (position=position_dodge(width=0.9), colour="black") + 
    geom_point (position=position_dodge(width=0.9), aes(y=mid, colour=group)) 

enter image description here

3

पहला परिवर्तन मैं advanced R style guide के अनुसार कोड पुन: स्वरूपित।

days <- data.frame(day=c(0,1,8,15)) 

groups <- data.frame(
    group=c("A","B","C","D", "E"), 
    means=seq(0,1,length=5) 
    ) 

my_data <- merge(days, groups) 

my_data$mid <- exp(my_data$means+rnorm(nrow(my_data), sd=0.25)) 
my_data$sigma <- 0.1 

अब जब हम डेटा को देखने के हम देखते हैं कि दिन एक कारक है और बाकी सब कुछ वैसा ही है।

str(my_data) 

साजिश से रिक्त स्थान को हटाने के लिए मैंने दिन कॉलम को कारकों में परिवर्तित कर दिया। जांचें कि आगे बढ़ने से पहले स्तर उचित क्रम में हैं।

my_data$day <- as.factor(my_data$day) 
levels(my_data$day) 

अगले परिवर्तन मैंने अपने aes बहस में y को परिभाषित किया गया था। जैसा कि मुझे यकीन है कि आप जानते हैं, इससे ggplot को पता चलता है कि y मानों को कहां देखना है। तब मैंने स्थिति तर्क को "चकमा" में बदल दिया और stat="identity" तर्क जोड़ा। "identity" तर्क x पर प्लॉट वाई करने के लिए ggplot बताता है। geom_errorbargeom_bar से चकमा स्थिति प्राप्त करता है ताकि आप इसे अनिर्दिष्ट छोड़ सकें, लेकिन geom_point ऐसा नहीं है कि आपको वह मान निर्दिष्ट करना होगा। डिफ़ॉल्ट चकमा position_dodge(.9) है।

ggplot(data = my_data, 
aes(x=day, 
    y= mid, 
    ymin=mid-sigma, 
    ymax=mid+sigma,  
    fill=group)) + 
    geom_bar(position="dodge", stat = "identity") + 
    geom_errorbar(position = position_dodge(), colour="black") + 
    geom_point(position=position_dodge(.9), aes(y=mid, colour=group)) 

enter image description here

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