2014-04-28 8 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' 인수를 의미했습니다. 'stat_function()'호출에'arg = list (shape = ...)'를 추가해야합니다. – ilir