Добавление графика нормальной плотности к гистограмме в ggplot

Это дополнительный вопрос из моего предыдущего поста в Построение двух гистограмм сверху и снизу одного графика

Я нарисовал ниже пару гистограмм

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 для второй гистограммы, было бы здорово.

Спасибо за ваше время.


2
60
1

Ответ:

Решено
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))
  )