2010-08-23 9 views
27

मैं ggplot में संचयी वितरण रेखा को आकर्षित करने का एक आसान तरीका ढूंढ रहा हूं।ggplot में संचयी आवृत्ति वितरण को साजिश करने का आसान तरीका?

मैं कुछ डेटा जिसका हिस्टोग्राम मैं तुरंत

qplot (mydata, binwidth=1); 

साथ मैं http://www.r-tutor.com/elementary-statistics/quantitative-data/cumulative-frequency-graph पर यह करने के लिए एक रास्ता मिल गया प्रदर्शित कर सकते हैं, लेकिन यह कई चरण होते हैं और जब डेटा की खोज यह समय लगता है।

वहाँ ggplot में एक और अधिक सरल तरीके से यह करने के लिए एक तरह से कैसे रुझान रेखाओं और विश्वास के अंतराल विकल्प का उल्लेख करने से जोड़ा जा सकता है के लिए इसी तरह है?

उत्तर

23

एक आर में ecdf() समारोह जो चीजों को आसान बनाने चाहिए में बनाया गया है। यहाँ मैं सिर्फ महसूस किया कि आप संचयी आवृति चाहते plyr

library(plyr) 
data(iris) 

## Ecdf over all species 
iris.all <- summarize(iris, Sepal.Length = unique(Sepal.Length), 
          ecdf = ecdf(Sepal.Length)(unique(Sepal.Length))) 

ggplot(iris.all, aes(Sepal.Length, ecdf)) + geom_step() 

#Ecdf within species 
iris.species <- ddply(iris, .(Species), summarize, 
          Sepal.Length = unique(Sepal.Length), 
          ecdf = ecdf(Sepal.Length)(unique(Sepal.Length))) 

ggplot(iris.species, aes(Sepal.Length, ecdf, color = Species)) + geom_step() 

उपयोग संपादित कुछ नमूना कोड,।

iris.all <- summarize(iris, Sepal.Length = unique(Sepal.Length), 
          ecdf = ecdf(Sepal.Length)(unique(Sepal.Length)) * length(Sepal.Length)) 

iris.species <- ddply(iris, .(Species), summarize, 
          Sepal.Length = unique(Sepal.Length), 
          ecdf = ecdf(Sepal.Length)(unique(Sepal.Length))*length(Sepal.Length)) 
+0

यह एक अच्छा जवाब है, लेकिन एक बात है जिसे मैं काफी समझ नहीं सकता। 'Ecdf (Sepal.Length) में (अद्वितीय (Sepal.Length)) 'बिट, क्या हो रहा है? मैं समझता हूं कि यह 'ecdf' ऑब्जेक्ट से ठोस मान निकालने वाला है, लेकिन मुझे यह याद नहीं है कि पहले (x) (y) नोटेशन पहले ... क्या आप इसे समझने में मेरी मदद कर सकते हैं? धन्यवाद! –

+3

@MattParker 'ecdf()' एक फ़ंक्शन देता है ताकि नोटेशन 'Sepal.Length' के अद्वितीय मानों पर लौटाए गए फ़ंक्शन का मूल्यांकन कर रहा हो। –

+0

@GavinSimpson समझे, धन्यवाद! –

20

भी आसान:: आप टिप्पणियों की कुल संख्या से ecdf मूल्य गुणा करके प्राप्त कर सकते हैं कि

qplot(unique(mydata), ecdf(mydata)(unique(mydata))*length(mydata), geom='step') 
+0

कूल, लेकिन इतना संक्षिप्त है कि मुझे एक ggplot कमांड का अनुवाद करने में कठिनाई हो रही है जिसका उपयोग मैं शीर्षक और धुरी लेबल सेट करने के लिए कर सकता हूं। – dfrankow

+0

मुझे लगता है कि मैं मुख्य, xlab, ylab का उपयोग कर सकते हैं। – dfrankow

+0

इच्छा है कि मैं दो बार ऊपर उठ सकता हूं, मैं यहां एक से अधिक बार वापस आ गया हूं। – dfrankow

46

ggplot2 के नए संस्करण (0.9.2.1) एक अंतर्निहित में stat_ecdf() समारोह जो आप संचयी वितरण को बहुत आसानी से साजिश देते हैं। ggplot2 प्रलेखन से

qplot(rnorm(1000), stat = "ecdf", geom = "step") 

या

df <- data.frame(x = c(rnorm(100, 0, 3), rnorm(100, 0, 10)), 
      g = gl(2, 100)) 
ggplot(df, aes(x, colour = g)) + stat_ecdf() 

कोड नमूने हैं।

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