Это дополнительный вопрос из моего предыдущего поста в Построение двух гистограмм сверху и снизу одного графика
Я нарисовал ниже пару гистограмм
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
, поэтому этот подход не работает.