如何在两个相互依赖的数据集上使用 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"。您只需要调整方框出现和消失的时间,让它们在圆点出现时及时出现。
如标题所示,我想对两个数据集进行动画处理。
第一个,很简单:
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"。您只需要调整方框出现和消失的时间,让它们在圆点出现时及时出现。