使用 gganimate 逐渐改变多边形的颜色

Gradually change colour of polygon with gganimate

我正在尝试创建一个动画,其中绘制一个对象同时逐渐改变其颜色。为了便于说明,假设我要绘制的对象是一个圆。

我目前有什么

我创建了一个数据集,其中包含我的圆的坐标、一个 time 变量和一个用于逐渐改变颜色的 alpha 变量:

t = seq(-pi, pi, length.out = 30)
df <- data.frame(
  x = sin(t), 
  y = cos(t), 
  time = 1:30, 
  alpha = seq(0.1, 1, length.out = 30)
)

然后我使用来自 {gganimate} 的 transition_reveal() 制作动画:

ggplot(df, aes(x = x, y = y)) + 
  geom_path() +
  geom_polygon(aes(alpha = alpha), fill = 'grey30') +
  coord_fixed() +
  scale_alpha_identity() +
  transition_reveal(time)

产生以下动画:

圆形是按顺序绘制的(这是我想要的),但是多边形的颜色没有改变。似乎只有 df$alpha 的第一个值用于整个动画。

我的问题是我怎样才能改变这个动画,使圆仍然按顺序绘制多边形的颜色逐渐变灰了?

可能有一种更简单的方法可以做到这一点,但通过一些数据操作,您可以通过 transition_states:

df$frame <- 1

df <- do.call(rbind, lapply(seq(nrow(df)), function(i) {
  df$frame <- i
  df$alpha <- seq(0.1, 1, length = 30)[i]
  df[1:i,]
  }
))

df <- df[df$frame > 2,]

ggplot(df, aes(x = x, y = y)) + 
  geom_path() +
  geom_polygon(aes(alpha = alpha), fill = 'grey30') +
  coord_fixed() +
  scale_alpha_identity() +
  transition_states(frame)