Графики с последовательным изменением плотности в R с помощью gganimate - PullRequest
0 голосов
/ 10 января 2020

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

Образец фрейма данных можно воссоздать с помощью следующего кода:

library(tidyverse)
library(gganimate)

sampled_data <- data.frame(Group = rep("A", 14),
                           week = c(0,2:5,7:14,20),
                           mean = c(30, 24.76111, 28.02916, 29.1741, 26.75879, 29.80132, 30.33864, 32.02787, 30.39993, 31.53138, 33.36167, 33.64898, 33.25587, 32.76954),
                           st_dev = c(10, 8.518451, 7.524797, 7.048826, 6.242289, 5.490741, 5.247176, 4.757057, 4.34478, 4.034823, 3.680196, 3.569206, 3.455505, 3.317643))

n = 20000

plot_df <- sampled_data %>% 
  uncount(n) %>% 
  mutate(value = rnorm(n(), mean, st_dev)) %>%
  select(Group, week, value)

Это даст вам кадр данных, который может быть передан в ggplot для наложения плотностей с помощью geom_density.

plot_df %>% 
  ggplot(aes(x=value, fill = as.factor(week))) +
  geom_density(alpha = 1)

enter image description here

Опция gganimate, позволяющая получить информацию о моем намерении: transition_reveal.

plot_df %>% 
  ggplot(aes(x=value, fill = as.factor(week))) +
  geom_density(alpha = 1) +
  transition_reveal(week)

enter image description here

Проблема с анимацией GIF заключается в том, что недели не «раскрывается» в последовательном порядке друг на друга. Когда я попытался упорядочить коэффициент с помощью seq_along() в сюжете aestheti c, ggplot(aes(x=value, fill = seq_along(as.factor(week)))), он удалил заливку цвета из графиков и по существу превратил анимацию в каркас, делая визуализацию бесполезной для целей обучения.

Моя конечная цель состоит в том, чтобы недели «распускались» на графике в последовательном порядке с последней неделей поверх всех предыдущих недель в наборе данных и сохраняли цвет заливки. Заранее благодарен за любую помощь в этом вопросе.

1 Ответ

0 голосов
/ 10 января 2020

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

Однако альтернативный метод делает работа:

plot_df %>% 
  ggplot(aes(x=value, fill = as.factor(week))) +
  geom_density(alpha = 1) +
  transition_time(week) +
  shadow_mark()

enter image description here

...