2014-04-28 41 views
3

我試圖繪製R中的直方圖並用不同分佈的密度疊加它。它對於常規直方圖運行良好,但我無法使它與ggplot2包配合使用。用ggplot繪製直方圖上的不同分佈

a <- dataset$age 

現在遵循我經常直方圖代碼:

Histogram_for_age <- hist(a, prob=T, xlim=c(0,80), ylim=c(0,0.055), main="Histogram for age with density lines", xlab="age") 

mean <- mean(a) 
sd <- sd(a) 

而且現在的行/爲密度曲線:

lines(density(dataset$age), col="blue", lwd=2, lty=1) 
curve(dnorm(x, mean = mean, sd = sd), add = T, col="red", lwd=2, lty=2) 
curve(dgamma(x, shape =mean^2/sd^2, scale = sd^2/mean), add = T, col="goldenrod", lwd=2, lty=3) 

和一個傳說:

legend("topright", 
    c("actual distribution of age","gaussian distribution", "gamma distribution"), 
    lty=c(1,2,3), 
    lwd=c(2,2,2),col=c("blue","red","goldenrod"), cex=0.65) 

這是我用gg試過的plot2到目前爲止:

ggplot(dataset, aes(x=age)) + 
geom_histogram(aes(y=..density..), 
      colour="black", fill="white") + 
geom_density(alpha=.2, fill="lightblue") + stat_function(fun = dgamma, shape=shape) 

什麼ggplot2參數等同於我的lines()和curve()參數?

回答

4

使用stat_density而不是geom_density這樣的:

ggplot(dataset, aes(x=age)) + 
    geom_histogram(aes(y=..density..), colour="black", fill="white") + 
    stat_density(colour="blue", geom="line", position="identity") + 
    stat_function(fun=dnorm, args=list(mean=mean(dataset_with_victims$TV_Alter), sd=sd(dataset_with_victims$TV_Alter))) + 
    stat_function(fun=dgamma, args=list(shape=mean(dataset_with_victims$TV_Alter)^2/sd(dataset_with_victims$TV_Alter)^2, scale=sd(dataset_with_victims$TV_Alter)^2/mean(dataset_with_victims$TV_Alter))) 
+0

謝謝你的快速反應!我在上面關於伽馬規格的形狀參數中使用了什麼? – Cajira

+0

您可能必須添加'geom =「point」',然後定義形狀。你可以提供一些[示例數據](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)?這使我更容易給出適當的答案。 – Jaap

+1

@ Cajira可能是指函數'dgamma'中的'shape'參數。你應該添加'arg = list(shape = ...)'調用'stat_function()' – ilir