2012-08-08 26 views
14

में प्रत्येक स्तर के लिए औसत मानों को प्लॉट करना मैं ggplot2 का उपयोग कर रहा हूं और एक साजिश उत्पन्न करने की कोशिश कर रहा हूं जो निम्न डेटा दिखाता है।ggplot2

df=data.frame(score=c(4,2,3,5,7,6,5,6,4,2,3,5,4,8), 
       age=c(18,18,23,50,19,39,19,23,22,22,40,35,22,16)) 
str(df) 
df 

इसके बजाय चर का एक आवृत्ति साजिश करने का (कोड नीचे देखें), मैं प्रत्येक x मूल्य के लिए औसत मूल्यों की एक साजिश उत्पन्न करना चाहते हैं। इसलिए मैं प्रत्येक आयु स्तर पर औसत स्कोर प्लॉट करना चाहता हूं। एक्स अक्ष पर 18 वर्ष की उम्र में, हमारे पास स्कोर के लिए वाई अक्ष पर हो सकता है। 23 साल की उम्र में, हमारे पास 4.5 का औसत स्कोर हो सकता है, और आगे (संपादित करें: औसत मान सही किए गए हैं)। यह आदर्श रूप से एक बारप्लॉट के साथ प्रतिनिधित्व किया जाएगा।

ggplot(df, aes(x=factor(age), y=factor(score))) + geom_bar() 
Error: stat_count() must not be used with a y aesthetic. 

बस यह सुनिश्चित न करें कि आर में ggplot2 के साथ ऐसा कैसे करें और ऐसे भूखंडों पर कुछ भी नहीं लग रहा है। सांख्यिकीय रूप से, मुझे नहीं पता कि मैं जिस साजिश को साजिश करना चाहता हूं वह भी सही काम है, लेकिन यह एक अलग दुकान है।

धन्यवाद!

+0

क्या आप क्योंकि आपके डेटासेट औसत मूल्यों से औसत मान चाहते हैं, पर 18 साल की उम्र 3 (नहीं 3.5) है, और 23 साल की उम्र में - 4.5 (नहीं 6.2)? – DrDom

+0

हाँ, मुझे औसत चाहिए। उस उदाहरण में, मैंने इसके बारे में सोचने के लिए कुछ संख्याएं बनाई हैं। – ATMathew

+1

@ATMathew, लेकिन चूंकि आप कुछ नमूना डेटा प्रदान करने का प्रयास कर रहे हैं, इसलिए आपको यह भी सुनिश्चित करना चाहिए कि आपका नमूना आउटपुट प्रदान किए गए डेटा के लिए सटीक है। अन्यथा, यह अनावश्यक भ्रम की ओर जाता है .... – A5C1D2H2I1M1N2O1R2T1

उत्तर

37

एक अन्य समाधान

ggplot(df, aes(x=factor(age), y=score)) + stat_summary(fun.y="mean", geom="bar") 

enter image description here

+0

ओपी शायद स्कोर को रूपांतरित करने के बारे में एक नोट जोड़ें एक कारक और आपका जवाब बिल्कुल ठीक होगा। – joran

+0

@DrDom, जवाब अब इतना स्पष्ट है कि आपने इसे पोस्ट किया है! (+1) – A5C1D2H2I1M1N2O1R2T1

+0

@ जोरन, हाँ, मैंने अपने जवाब में यह माना है। चूंकि कारकों का मतलब इस मामले में अर्थहीन मूल्य होगा। :) – DrDom

8

अगर मैं तुम्हें सही समझ में आया, आप कुछ इस तरह की कोशिश कर सकते:

library(plyr) 
library(ggplot2) 
ggplot(ddply(df, .(age), mean), aes(x=factor(age), y=factor(score))) + geom_bar() 
6

तुम भी aggregate() आधार आर में के बजाय एक और पैकेज को लोड करने की उपयोग कर सकते हैं।

temp = aggregate(list(score = df$score), list(age = factor(df$age)), mean) 
ggplot(temp, aes(x = age, y = score)) + geom_bar()