2010-08-23 21 views
27

Ggplot'ta birikimli dağıtım çizgisini çizmek için daha kolay bir yol arıyorum.Ggplot'ta birikimli frekans dağılımını çizmenin daha kolay yolu?

Kimin histogram ben http://www.r-tutor.com/elementary-statistics/quantitative-data/cumulative-frequency-graph bunu yapmak için bir yol bulmuş

qplot (mydata, binwidth=1); 

ile ben hemen görüntüleyebilir bazı veriler var ama birkaç adımdan oluşur ve verileri keşfetmek zaman zaman alıcı var.

Ggplot'ta bunu daha açık bir şekilde yapmanın bir yolu var mı, seçeneklerin belirlenmesiyle trend çizgileri ve güven aralıkları nasıl eklenebilir?

cevap

23

R'de ecdf() işlevinde, işleri kolaylaştırmak için yerleşik bir işlev var. Burada Sadece kümülatif frekansı istediklerini fark Düzenlemeplyr

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() 

kullanan bazı örnek kod.

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

Bu harika bir cevap, ama tam olarak anlayamadığım bir şey var. Ecdf (Sepal.Length) (benzersiz (Sepal.Length)) bite, ne oluyor? “Ecdf” nesnesinden somut değerler çıkardığını anlıyorum, ama daha önce (x) (y) notasyonunu gördüğümü hatırlamıyorum ... bunu anlamama yardım edebilir misin? Teşekkürler! –

+3

@MattParker 'ecdf()' bir işlevi döndürür, böylece gösterim "Sepal.Length" un benzersiz değerlerinde döndürülen işlevi değerlendirir. –

+0

@GavinSimpson Anladım, teşekkürler! –

20

Daha kolay: Sen gözlemlerin toplam sayısına göre ecdf değeri ile çarparak o alabilirsiniz sahiptir

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

Serin, ama çok özlü Ben başlık ve eksen etiketleri ayarlamak için kullanabileceğiniz bir ggplot komutuna çeviri zor bir zaman geçiriyorum. – dfrankow

+0

Sanırım ana, xlab, ylab kullanabilirim. – dfrankow

+0

Keşke iki kere daha alabilseydim, buraya bir kereden fazla geldim. – dfrankow

46

ggplot2 yeni versiyonu (0.9.2.1) yerleşik bir stat_ecdf() fonksiyonu kümülatif dağılımları çok kolay bir şekilde çizelim. ggplot2 belgelerinden

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

Ya

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() 

Kod örnekleri.

İlgili konular