gganimate:具有不同几何形状和时间点的两层

时间:2020-09-24 13:28:48

标签: r ggplot2 gganimate

问题类似于this问题,但此处两层使用不同的几何形状geom_tilegeom_point。想法是让图块仅在第2、5、8帧中的不同位置显示,并且该点在每帧中沿对角线移动。

尝试运行以下示例时,出现错误:

错误:时间数据在所有图层中必须是同一类

示例

require(data.table)
require(ggplot2)
require(gganimate)

# 3 tiles along x = 10-y; present at time points 2, 5, 8
dtP1 = data.table(x = c(1, 5, 9),
                  y = c(9, 5, 1),
                  t = c(2, 5, 8))

# 9 points along x=y; present at every time point
dtP2 = data.table(x = 1:9,
                  y = 1:9,
                  t = 1:9)

p = ggplot() +
    geom_tile(data = dtP1,
              aes(x = x,
                  y = y),
                  color = "#000000") +
    geom_point(data = dtP2,
               aes(x = x,
                   y = y),
               color = "#FF0000") +
    gganimate::transition_time(t) +
    gganimate::ease_aes('linear')

pAnim = gganimate::animate(p, 
                           renderer = av_renderer("~/test.mp4"), 
                           fps = 1, 
                           nframes = 9,
                           height = 400, width = 400)

1 个答案:

答案 0 :(得分:3)

以下为您工作吗?

library(dplyr)

p <- rbind(dtP1 %>% mutate(group = "group1"),
           dtP2 %>% mutate(group = "group2")) %>%
  tidyr::complete(t, group) %>%
  ggplot(aes(x = x, y = y)) +
  geom_tile(data = . %>% filter(group == "group1"),
            color = "black") +
  geom_point(data = . %>% filter(group == "group2"),
             color = "red") +
  ggtitle("{frame_time}") + # added this to show the frame explicitly; optional
  transition_time(t) +
  ease_aes('linear')

animate(p, nframes = 9, fps = 1)

plot