加速 gganimate 中的转换

Accelerating transitions in gganimate

我有一个有几百行的情节。我希望这些线条随着时间的推移出现;首先慢慢地,有时间向观众解释发生了什么事;然后越来越快。

下面的最小示例给出了动画当前外观的示例。我想要的是第一帧有几秒钟,第二帧大约是一半,第三帧是一半,等等。本质上,持续时间应该呈指数级变短。

但是,我不知道如何更改持续时间。我认为选项 ease_aes() 应该这样做,因为它允许 exponential_in 等函数。尽管使用此选项似乎对我没有任何改变。

我还发现了一个 可以减慢一个特定的帧,所以我认为我应该能够将此代码应用到我的用例中。不过,过渡持续时间在各帧之间看起来是相同的。 (请注意,最后一个示例存在前一行消失的问题,这也不是我想要的;这只是为了说明持续时间不会改变)。

我错过了什么?

library(data.table)
library(gganimate)
DT <- data.table(x  = rep(1:10,  times=100),
                 y  = rep(1:10,  times=100) + rnorm(1000),
                 id = rep(1:100, each=10))
anim <- ggplot(DT) +
  geom_line(aes(x=x, y=y, group=id)) +
  transition_reveal(id) 

animate(anim, nframes = 100)


####Playing around with eas_aes does not work for me
anim <- ggplot(DT) +
  geom_line(aes(x=x, y=y, group=id)) +
  transition_reveal(id) +
  ease_aes("exponential-in")

animate(anim, nframes = 100)


####Transition states also doesn't work:
# 
anim <- ggplot(DT) +
  geom_line(aes(x=x, y=y, group=id)) +
  transition_states(id, 
                    state_length = 0,
                    transition_length = 100:1)

animate(anim, nframes = 100)

只需创建一个 time 列,连续时间之间的差距呈指数下降,并据此显示。

DT <- data.table(x  = rep(1:10,  times=100),
                 y  = rep(1:10,  times=100) + rnorm(1000),
                 id = rep(1:100, each=10),
                 time = rep(cumsum(100 / 1:100), each = 10))
anim <- ggplot(DT) +
  geom_line(aes(x=x, y=y, group=id)) +
  transition_reveal(time) 

animate(anim, nframes = 200)