你尝试过 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")
![enter image description here](https://istack.dev59.com/SWfXo.webp)
根据我提供的问题,创建一个包含不同正态曲线的独立数据框:
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")
![enter image description here](https://istack.dev59.com/5GYaF.webp)
lines()
等)与ggplot2和lattice包使用的网格图形混合在一起。 - Gavin Simpson