如何在两个相互依赖的数据集上使用 gganimate

How to use gganimate over two datasets which depend on one another

如标题所示,我想对两个数据集进行动画处理。

第一个,很简单:

dots <- tribble(
  ~x,  ~y, ~time,
  1, 1, 1,
  1, 2, 2,
  2, 2, 3,
  2, 1, 4, 
  1, 1, 5
)

anim <- ggplot(data = dots, mapping = aes(x, y)) +
  geom_point() +
  transition_time(time) +
  ggtitle("Frame: {frame_time}")

anim

这会产生以下令人兴奋的动画:

如你所见,dots tibble 中的点是根据时间维度移动的,其基数为 5。我希望在 time == 2 时出现一个框当 time == 4.

如果我修改代码,我可以让方框静态显示:

boxes <- tribble(
  ~x, ~y, ~id, ~timeb,
  0.9, 1.9, 1, 2,
  1.1, 1.9, 1, 2,
  1.1, 2.1, 1, 2,
  0.9, 2.1, 1, 2,
  0.9, 1.9, 1, 2,
  1.9, 0.9, 2, 4,
  2.1, 0.9, 2, 4,
  2.1, 1.1, 2, 4,
  1.9, 1.1, 2, 4,
  1.9, 0.9, 2, 4
)


anim <- ggplot(data = dots, mapping = aes(x, y)) +
  geom_point() +
  transition_time(time) +
  ggtitle("Frame: {frame_time}") +
  geom_polygon(data = boxes %>% filter(id == 1), mapping = aes(x, y), fill = NA, colour = "black") +
  geom_polygon(data = boxes %>% filter(id == 2), mapping = aes(x, y), fill = NA, colour = "black")

anim

产生这个动画的:

所以,从本质上讲,我希望在点靠近时出现框。

我不希望盒子只是闪烁,我希望它们淡入淡出,例如:

我制作的如下:

anim_2 <- ggplot(data = boxes, mapping = aes(x, y, group = id)) +
  geom_polygon(fill = NA, colour = "black") +
  transition_states(id) +
  enter_fade() +
  exit_fade()

anim_2

我希望这是有道理的(并且有人对此有好主意:)

在此处查看此示例:https://github.com/thomasp85/gganimate/wiki/Tracking-of-hurricanes-and-typhoons

请注意,两个 geom(线和点)各自引用一个包含列 time 的数据框。原则上这可能是两个不同的数据帧,只要它们在时间维度上共享相同的命名列即可。

这意味着您可以 transition_time 为多个几何体设置动画 "independently"。您只需要调整方框出现和消失的时间,让它们在圆点出现时及时出现。