首页 > 解决方案 > 如何在两个相互依赖的数据集上使用 gganimate

问题描述

正如标题所示,我想为两个数据集制作动画。

第一个,很简单:

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

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

第一个动画

如您所见,点根据dotstibble 中的时间维度移动,其基数为 5。我希望在 whentime == 2和 when出现一个框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

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

标签: rgganimate

解决方案


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

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

这意味着您可以transition_time“独立”地为多个几何图形设置动画。你只需要玩弄你的盒子出现和消失的时间,让它们及时出现在点上。


推荐阅读