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,9),y = c(9,1),t = c(2,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,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)

解决方法

以下为您工作吗?

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...