问题描述
我想用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)
解决方法
通常,使用 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
您可以在此处精确定义每个时间步长在每个点上发生的情况。甚至定义它应该在什么时间出现。
希望能解决您的问题,但是此功能(当前)不适用于行。
当您尝试将这些内容以某种方式集成到此工作流程中时,会出现以下错误:
错误:transition_components当前不支持路径层
因此基本上所有带有geom_line,geom_smooth等行的东西都无法与此功能一起使用。
我认为您想要的是防止发生过渡的点的奇怪行为以及geom_smooth滞后。也许您可以只设置代码transition_length = 0
来防止这种情况。