Это дополнительный вопрос из моего предыдущего поста в Построение двух гистограмм сверху и снизу одного графика
Я нарисовал ниже пару гистограмм
library(ggplot2)
set.seed(1)
dat = rbind(data.frame('val' = rnorm(100), 'met' = 'Metric1'), data.frame('val' = rt(100, 2), 'met' = 'Metric12'))
ggplot(dat, aes(x = val, fill = met)) +
geom_histogram(data = dat[dat$met == 'Metric1',],
breaks = seq(-10, 10, 0.5),
mapping = aes(y = after_stat(density)),
colour = "black",
alpha = 0.3) +
stat_function(fun = dnorm, args = list(mean = 0, sd = 1)) +
geom_histogram(data = dat[dat$met == 'Metric12', ],
breaks = seq(-10, 10, 0.5),
mapping = aes(y = -after_stat(density)),
colour = "black",
alpha = 0.3)+
coord_cartesian(xlim = c(-10, 10))
Благодаря этому я смог нарисовать normal density plot для первой гистограммы, но не смог наложить кривую нормальной плотности для второй гистограммы.
Любое предложение, как нарисовать второй normal density plot для второй гистограммы, было бы здорово.
Спасибо за ваше время.





ggplot() +
geom_histogram(data = dat[dat$met == 'Metric1',],
breaks = seq(-10, 10, 0.5),
mapping = aes(x = val, y = after_stat(density)),
colour = "black",
alpha = 0.3) +
geom_histogram(data = dat[dat$met == 'Metric12', ],
breaks = seq(-10, 10, 0.5),
mapping = aes(x = val, y = -after_stat(density)),
colour = "black",
alpha = 0.3)+
coord_cartesian(xlim = c(-10, 10))+
geom_line(
aes(
x = dat[dat$met == 'Metric1',]$val,
y = dnorm(dat[dat$met == 'Metric1',]$val),
color = as.factor(1))
)+
geom_line(
aes(
x = dat[dat$met == 'Metric12',]$val,
y = -dnorm(dat[dat$met == 'Metric12',]$val),
color = as.factor(2))
)
Я немного изменил код: dnorm2 <- rlang::as_function(~ dnorm(.x, 0, 4) * -1) — Теперь это работает. Поэтому я принимаю этот ответ
Как я упоминал в комментарии к своему (неверному) ответу, параметр
dataигнорируетсяstat_function, поэтому этот подход не работает.