Кривые нормальной плотности на нескольких гистограммах на одном графике - PullRequest
1 голос
/ 20 июня 2019

У меня есть датафрейм, например, такой:

sample1 <- seq(120,197, length.out =  60)
sample2 <- seq(113, 167, length.out = 60)
sample3 <- seq(90,180, length.out = 60)
sample4 <-seq(100, 160, length.out = 60)

df <- as.data.frame(cbind(sample1, sample2, sample3, sample4))

Теперь мне нужно создать гистограммы для этих четырех переменных, чтобы все они имели одну и ту же ось Y , а также нужно наложить кривые нормальной плотности на каждую из этих гистограмм. , facet_wrap () будет в порядке, если ось Y такая же.

Ранее сегодня я думал, что решил эту проблему под руководством эксперта на форуме, но позже понял, что решение просто перекрывает кривую плотности, а не решение с нормальным распределением. Я пробовал несколько вариантов с ggplot, а также базовые функции построения графиков, но то, что кажется простой задачей для одной переменной, не вполне достижимо при наличии нескольких переменных ??

Есть мысли о том, как решить эту проблему?

Спасибо

1 Ответ

1 голос
/ 20 июня 2019

Это один из возможных способов сделать это, используя tidyverse

library(tidyverse)

# example data
sample1 <- seq(120, 197, length.out =  60)
sample2 <- seq(113, 167, length.out = 60)
sample3 <- seq(90, 180, length.out = 60)
sample4 <- seq(100, 160, length.out = 60)

df <- data.frame(sample1, sample2, sample3, sample4)

# update your original dataframe to a nested dataframe by adding simulated values from normal distribution 
df2 = df %>%
  gather() %>%                                                           # reshape data  
  group_nest(key) %>%                                                    # for each key (i.e. sample)
  mutate(norm = map(data, ~rnorm(10000, mean(.x$value), sd(.x$value))))  # simulate 10K observations from the corresponding normal distribution

ggplot()+
  # plot histogram using info from nested column data (i.e. original observations)
  geom_histogram(data = df2 %>% unnest(data), aes(value, fill=key, ..density..), alpha=0.3)+
  # plot density using info from nested column norm (i.e. simulated normal observations)
  geom_density(data = df2 %>% unnest(norm), aes(norm, col=key))+
  # separate plots by key (i.e. sample)
  facet_wrap(~key)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...