Вы пробовали stat_function
?
+ stat_function(fun = dnorm)
Возможно, вы захотите построить гистограммы, используя aes(y = ..density..)
, чтобы построить значения плотности, а не счетчики.
В этом вопросе можно найти много полезной информации, включая некоторые советы по построению различных нормальных кривых на разных гранях.
Вот несколько примеров:
dat <- data.frame(x = c(rnorm(100),rnorm(100,2,0.5)),
a = rep(letters[1:2],each = 100))
Наложите одну нормальную плотность на каждый фасет:
ggplot(data = dat,aes(x = x)) +
facet_wrap(~a) +
geom_histogram(aes(y = ..density..)) +
stat_function(fun = dnorm, colour = "red")

Из вопроса, с которым я связан, создайте отдельный фрейм данных с различными нормальными кривыми:
grid <- with(dat, seq(min(x), max(x), length = 100))
normaldens <- ddply(dat, "a", function(df) {
data.frame(
predicted = grid,
density = dnorm(grid, mean(df$x), sd(df$x))
)
})
И нанесите их отдельно, используя geom_line
:
ggplot(data = dat,aes(x = x)) +
facet_wrap(~a) +
geom_histogram(aes(y = ..density..)) +
geom_line(data = normaldens, aes(x = predicted, y = density), colour = "red")
