2015-09-19 15 views
5

Modellerden aldığım bazı veriler var. Zaman içinde bir nüfusun boyutunu çizmek istiyorum. Her zaman adımında popülasyon büyüklüğüm ve 100 tekrar var. Her zaman adımı için ortalama nüfus büyüklüğünü ve ayrıca% 95 güven aralığı (mümkünse bir gölgeleme olarak) çizmek istiyorum.Aracın ggplot ile güvenlik aralıklarıyla çizilmesi

Daha önce ggplot kullanmamıştım. Şimdiye kadar R'de sıradan (taban) çizimleri kullanıyorum. Ama ben ggplot'un neye benzediğini görmek istiyorum.

İşte ben bugüne kadar ne var:

ggplot(data=model1, aes(x=steps., y= pop-size, col='blue')) + 
    geom_line() 

Bu, tüm noktaları çizer ve iyi görünüyor, ama sadece aracı çizmek ve güven aralıkları nasıl ekleneceğini bilmiyorum.

+1

Burada kontrol etmeniz gerekir: http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/ – AntoniosK

+1

Ayrıca "? Stat_smooth" a bakın. – Jaap

+0

(nispeten) SO için yeni olduğunuza göre, lütfen [this] (http://stackoverflow.com/help/mcve) ve [this] 'i okuyun (http://stackoverflow.com/questions/5963269/how-to -make-a-büyük-r-tekrarlanabilir-örnek/5963610 # 5963610) cevap alma olasılığı daha yüksek olan iyi hazırlanmış bir soruyu nasıl ortaya koyacağı. – jlhoward

cevap

13

Verileri çoğalttığınızdan ve ortalama/CL grafiğini çizmek istediğinizden, muhtemelen verileri özetlemek için (tahmin ettiniz) stat_summary(...)'u kullanmanız daha iyi olacaktır. Temel olarak, her x değeri için (örneğin, mean(...) işlevi) tüm y değerlerine bir işlev uygular ve ardından belirttiğiniz geometriyi kullanarak sonucu çizer. İşte bir örnek: Yani burada

# sample data - should be provided in question 
set.seed(1)  # for reproducible example 
time <- 1:25 
df <- data.frame(time, 
        pop=rnorm(100*length(time), mean=10*time/(25+time))) 

library(ggplot2) 
ggplot(df, aes(x=time, y=pop))+ 
    stat_summary(geom="ribbon", fun.data=mean_cl_normal, width=0.1, conf.int=0.95, fill="lightblue")+ 
    stat_summary(geom="line", fun.y=mean, linetype="dashed")+ 
    stat_summary(geom="point", fun.y=mean, color="red") 

biz 3 katmanları: geom="line" kullanarak mean(...) işlevini kullanarak y-değerleri ve araziler özetleyen bir katman, aynı şekilde fakat araziler özetleyen bir katman geom="point" kullanarak ve geom="ribbon" kullanan bir katman Bu geom, ymin ve ymax estetikleri gerektirir; dolayısıyla, hata normal olarak dağıtıldığı varsayımını temel alarak bunları oluşturmak için yerleşik ggplot işlevini mean_cl_normal kullanırız ve bu nedenle, -Dağıtım. Güven sınırlamaları için yararlı olan çeşitli işlevlerle ilgili belgeler için ?hmisc yazın. Katmanlar kod sırasına göre işlenir, böylece gölgelendirme yapmak istediğinizden önce hata şeridini koymamız gerekir. Son olarak, dplyr ya da benzerlerini kullanarak verileri kendiniz özetlemek elbette mümkündür, ancak bunu yapma noktasını gerçekten göremiyorum. (Son açıklama dayanarak)

Güncelleme: ggplot2 (2.0.0) en son versiyonu gibi görünüyor fun.data argümanlar belirterek farklı bir tarzı vardır. Bence

ggplot(df, aes(x=time, y=pop))+ 
    stat_summary(geom="ribbon", fun.data=mean_cl_normal, 
       fun.args=list(conf.int=0.95), fill="lightblue")+ 
    stat_summary(geom="line", fun.y=mean, linetype="dashed")+ 
    stat_summary(geom="point", fun.y=mean, color="red") 

width=... bağımsız değişkenle sorun biraz daha ince olduğu: Bu yeni sürümde çalışır aslında ben hata çubukları kullanılan orijinal cevap (ihtiyacı vardı ve bu tartışmayı kaldırmak unuttum değildir şeride değiştirdiğimde). Ggplot2'nin eski sürümü, yabancı argümanları görmezden geldi (dolayısıyla hata yok). Yeni sürüm, açıkça, daha katıdır. Muhtemelen bu daha iyidir.

+1

Biraz "stat_summary (geom =" ribbon ", fun.data = mean_cl_normal, color = NA, alpha = 0 tercih ederim.1) ' –

+0

Hata çubuklarını tercih ederim aslında, ama aslında soruyu yanlış anladım - OP kurdeleler istiyor. Cevabımı düzenledim. – jlhoward

+0

Teşekkürler! Bu harika. Bir dahaki sefere soruma örnek veri koyduğumdan emin olacağım. – 91dpo