gganimate并不总是显示geom_rect元素,而是添加原始数据中不存在的值

时间:2019-07-04 09:01:28

标签: r animation ggplot2 data-visualization gganimate

这是dump版的示例数据集:

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程序包,并按照its provided example进行了操作:

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

enter image description here

现在这不是我期望的。问题包括:

  1. 大多数框架中缺少彩色矩形。
  2. 来自同一用户的数据点以多帧显示,并且不断移动。那些在给定的数据中不存在。
  3. 尽管“我的月”列中只有几个月的第一天的日期,但框架不会按月进行。

我想要一个动画,

  1. 彩色矩形作为固定背景保留在每一帧中。
  2. 数据仅在它们来自原始数据集时显示。
  3. 每个框架代表一个月。

我该怎么做呢?为什么我的解决方案不起作用?谢谢。

0 个答案:

没有答案