Если вы хотите построить гистограмму с нормальным распределением сверху, это один из самых простых способов:
library(ggplot2)
df <- data.frame(
x = rnorm(100, mean = 50, sd = 5)
)
ggplot(df, aes(x)) +
geom_histogram(aes(y = stat(density))) +
stat_function(fun = dnorm, args = list(mean = mean(df$x), sd = sd(df$x)))
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
![](https://i.imgur.com/USLZ4BG.png)
Создано 2020- 05-26 с помощью пакета REPEX (v0.3.0)
Если вы хотите сохранить ось Y в единицах отсчета, вам придется обернуть функцию dnorm и масштабируйте его по ширине бина и количеству наблюдений:
wrap_dnorm <- function(x, mean = 0, sd = 1, binwidth = 1, count = 1) {
dnorm(x, mean = mean, sd = sd) * binwidth * count
}
ggplot(df, aes(x)) +
geom_histogram(binwidth = 1) +
stat_function(fun = wrap_dnorm,
args = list(mean = mean(df$x), sd = sd(df$x),
binwidth = 1, count = nrow(df)))