用gganimate添加几何

问题描述

我想用gganimate创建一个动画ggplot。有没有一种方法可以使用gganimate添加多个动画几何体?因此,如在下面使用transition_states()的示例中,我希望geom_smooth()出现为新状态,而不是geom_points()。最后,我要控制持续时间,分别输入和退出第二个几何图形。

  library(gganmiate)
  ggplot(iris,aes(x = Petal.Width,y = Petal.Length)) +
  geom_smooth(aes(colour = Species),method = "lm",se = F) +
  geom_point() +
  transition_states(Species,transition_length = 2,state_length = 1)

enter image description here

解决方法

通常,使用 gganimate 可以单独控制各个组件。但是,我认为您当前不希望做的事情有效(但也许有人知道更好-会受到高度赞赏)。

使用transition_components()代替transition_states()

从文档中:

transition_components(): 这种过渡允许各个视觉组件定义自己的“生命周期”。这意味着最终动画将没有任何公共的“状态”和“过渡”阶段,因为任何组件在任何时间点都可以移动或静止。

下面是一个在每个时间步分别控制两个点的示例:

data <- data.frame(
      x = c(1,1,2,2),y = c(1,3,4,5,5),time = c(1,id = c(1,col = c("red","red","blue","yellow","green","pink")
   )

 anim2 <- ggplot(data,aes(x,y,group = id,size = 10,colour = col)) +
       geom_point() + transition_components(time)
 
 anim2

enter image description here

您可以在此处精确定义每个时间步长在每个点上发生的情况。甚至定义它应该在什么时间出现。

希望能解决您的问题,但是此功能(当前)不适用于行。

当您尝试将这些内容以某种方式集成到此工作流程中时,会出现以下错误:

错误:transition_components当前不支持路径层

因此基本上所有带有geom_line,geom_smooth等行的东西都无法与此功能一起使用。

我认为您想要的是防止发生过渡的点的奇怪行为以及geom_smooth滞后。也许您可以只设置代码transition_length = 0来防止这种情况。