Создайте частотную гистограмму, чтобы показать изменения после каждой дополнительной выборки - PullRequest
1 голос
/ 16 марта 2020

У меня есть следующий набор данных, представляющий повторные выборки популяции и среднее значение выборки:

data.frame(sample = 1:50, mu = rnorm(n = 50, mean = 0, sd = 1))

Я сделал гистограмму частоты в ggplot, используя следующий код:

data.frame(sample = 1:50, mu = rnorm(n = 50, mean = 0, sd = 1)) %>% 
ggplot(data = ., aes(mu)) + 
geom_histogram()

enter image description here

Я пытаюсь анимировать эту гистограмму, используя gganimate, где каждая дополнительная выборка изменяет распределение частот средних на графике. Однако я не знаю, как это сделать.

Я пытался это сделать, но результат не такой, как хотелось бы:

data.frame(sample = 1:50, mu = rnorm(n = 50, mean = 0, sd = 1)) %>% 
ggplot(data = ., aes(x = mu)) +
  geom_histogram() +
  transition_time(sample) +
  ease_aes("linear") +
  enter_fade() +
  exit_fade()

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 16 марта 2020

Если я вас правильно понял, вы хотите, чтобы гистограмма со временем создавалась, добавляя новый образец с каждым шагом. Если это то, что вы хотите, это может быть достигнуто следующим образом:

Основная идея состоит в том, чтобы разделить выборку на части, а затем накапливать выборки в кадры, т.е. в кадре 1 показывается только выборка 1, в выборке кадра 2 1 и 2, .....

library(gganimate)
#> Lade nötiges Paket: ggplot2
library(ggplot2)
library(dplyr)
library(purrr)

set.seed(42)

# example data
df <- data.frame(sample = 1:500, mu = rnorm(n = 50, mean = 0, sd = 1))

df_ani <- df %>% 
  split(.$sample) %>% 
  accumulate(~ bind_rows(.x, .y)) %>% 
  bind_rows(.id = "frame") %>% 
  mutate(frame = as.integer(frame))
head(df_ani)
#>   frame sample         mu
#> 1     1      1  1.3709584
#> 2     2      1  1.3709584
#> 3     2      2 -0.5646982
#> 4     3      1  1.3709584
#> 5     3      2 -0.5646982
#> 6     3      3  0.3631284

p_gg <- ggplot(data = df, aes(x = mu)) +
  geom_histogram()
p_gg
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

p_anim <- ggplot(data = df_ani, aes(x = mu)) +
  geom_histogram()

anim <- p_anim + transition_manual(frame) +
  ease_aes("linear") +
  enter_fade() +
  exit_fade()
anim
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Создано в 2020-03-17 по представительный пакет (v0.3.0)

...