gganimate не всегда показывает элементы geom_rect, но добавляет значения, которых нет в исходных данных - PullRequest
1 голос
/ 04 июля 2019

Вот пример набора данных dump ed:

sample_data <-
structure(list(
  user_id = c("E", "T", "B", "R", "I", "L", "Z", "M", "W", "A"),
  month = structure(c(17836, 17956, 17683, 17622, 18017, 17318, 17471, 17928, 17987, 18017), class = "Date"),
  value_foo = c(92.68, 98.5, 36.82, 64.58, 36.59, 81.86, 64.99, 59.14, 78.41, 63.4), 
  value_bar = c(3.28, 4.17, 730.25, NA, 2971.95, 12.2, 3.85, 14.14, 40.69, 21.67)
), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L))

Обратите внимание, что у каждого user_id есть только одна строка.Если я создаю статический график, где x и y равны value_bar и value_foo соответственно, это выглядит так:

g <- ggplot(sample_data, aes(value_bar, value_foo)) +
  geom_rect(xmin = -Inf, xmax = 30, ymin = 60, ymax = Inf, fill = "green", alpha = 0.05) +
  geom_rect(xmin = -Inf, xmax = 30, ymin = 45, ymax = 60, fill = "yellow", alpha = 0.05) +
  geom_rect(xmin = -Inf, xmax = 30, ymin = 30, ymax = 45, fill = "orange", alpha = 0.05) +
  geom_rect(xmin = 30, xmax = 300, ymin = 60, ymax = Inf, fill = "yellow", alpha = 0.05) +
  geom_rect(xmin = 300, xmax = Inf, ymin = 60, ymax = Inf, fill = "orange", alpha = 0.05) +
  geom_rect(xmin = 30, xmax = 300, ymin = 45, ymax = 60, fill = "orange", alpha = 0.05) +
  geom_rect(xmin = 300, xmax = Inf, ymin = 45, ymax = 60, fill = "red", alpha = 0.05) +
  geom_rect(xmin = 30, xmax = Inf, ymin = 30, ymax = 45, fill = "red", alpha = 0.05) +
  geom_rect(xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = 30, fill = "red", alpha = 0.05) +
  geom_point() +
  geom_label(aes(label = user_id), hjust = 0, nudge_x = 50)
g

enter image description here

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

p <- g +
  transition_time(month) +
  labs(title = "{frame_time}")
animate(p, fps = 2)

enter image description here

Теперь это не то, что я ожидал. Проблемы включают в себя:

  1. Цветные прямоугольники отсутствуют вбольшинство кадров.
  2. Точки данных от одного и того же пользователя отображаются в нескольких кадрах, перемещаясь.Их нет в данных.
  3. Кадры не выполняются ежемесячно, хотя в моем столбце месяцев указаны только даты 1-го числа месяцев.

Я хочуанимация, в которой

  1. Цветные прямоугольники остаются в каждом кадре в качестве фиксированного фона.
  2. Данные отображаются только в том случае, если они исходят из исходного набора данных.
  3. Каждый кадр представляетв месяц.

Как мне правильно это сделать?И почему мое решение не работает?Спасибо.

...