【问题标题】:Gradually change colour of polygon with gganimate用 gganimate 逐渐改变多边形的颜色
【发布时间】:2022-02-06 00:09:31
【问题描述】:

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

我目前所拥有的

我创建了一个数据集,其中包含我的圆的坐标、一个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 的第一个值用于整个动画。

因此我的问题是如何更改此动画,以使圆圈仍按顺序绘制并且多边形的颜色逐渐变灰?

【问题讨论】:

    标签: r ggplot2 gganimate


    【解决方案1】:

    可能有一种更简单的方法可以做到这一点,但是通过一些数据操作,您可以通过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)
    

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多