R GG对点停留和线淡入的绘图设置动画

R GG对点停留和线淡入的绘图设置动画,r,animation,ggplot2,gganimate,R,Animation,Ggplot2,Gganimate,这里是一个静态绘图的可复制示例,我想对其进行动画制作(我想展示MCMC采样器的行为) 我正在努力解决的是如何为两个几何体添加两种不同的行为,例如点和线。例如,在下图中,点消失(我不希望它们消失),线条不褪色(我希望它们消失) p我在使用内置的shadow.*函数一次控制多个行为时遇到问题;它似乎只是应用了最近的一个。(使用gganimate 1.0.3.9000) 解决此问题的一种方法是手动计算过渡。例如,我们可以复制数据100次,每帧一次,然后分别指定点层的alpha和线段层的alpha p

这里是一个静态绘图的可复制示例,我想对其进行动画制作(我想展示MCMC采样器的行为)

我正在努力解决的是如何为两个几何体添加两种不同的行为,例如点和线。例如,在下图中,点消失(我不希望它们消失),线条不褪色(我希望它们消失)


p我在使用内置的
shadow.*
函数一次控制多个行为时遇到问题;它似乎只是应用了最近的一个。(使用gganimate 1.0.3.9000)

解决此问题的一种方法是手动计算过渡。例如,我们可以复制数据100次,每帧一次,然后分别指定点层的alpha和线段层的alpha

plot_data %>%
  uncount(100, .id = "frame") %>%
  filter(time <= frame) %>%
  arrange(frame, time) %>%
  group_by(frame) %>%
  mutate(x_lag = lag(x), 
         y_lag = lag(y),
         tail = last(time) - time,
         # Make the points solid for 1 frame then alpha 0.3
         point_alpha = if_else(tail == 0, 1, 0.3),
         # Make the lines fade out over 20 frames
         segment_alpha = pmax(0, (20-tail)/20)) %>%
  ungroup() %>%

  ggplot(aes(x=y, y=x, xend = y_lag, yend = x_lag, group = time)) +
  geom_segment(aes(alpha = segment_alpha)) +
  geom_point(aes(alpha = point_alpha)) +
  scale_alpha(range = c(0,1)) +
  guides(alpha = F) +
  transition_manual(frame)
plot\u data%>%
取消计数(100,.id=“frame”)%>%
过滤器(时间%)
安排(帧、时间)%>%
分组依据(帧)%>%
突变(x_滞后=滞后(x),
y_滞后=滞后(y),
尾=上次(时间)-时间,
#使点为1帧的实线,然后alpha 0.3
点α=如果其它(尾==0,1,0.3),
#使线条在20帧内淡出
分段α=pmax(0,(20尾)/20))%>%
解组()%>%
ggplot(aes(x=y,y=x,xend=y_滞后,yend=x_滞后,组=时间))+
geom_段(aes(α=段α))+
几何点(aes(α=点α))+
标度α(范围=c(0,1))+
导向装置(α=F)+
过渡_手册(框架)


(对于此渲染,我将其包装在
动画([以上所有内容],宽度=600,高度=400,type=“cairo”)
中)

非常感谢您。您的答案中有一个小问题:point_alpha=…&segment_alpha=…需要在mutate(…)中。相应地修改了答案。
ggplot(data=plot_data,
       aes(x=y, y=x)) +
  geom_point() +
  transition_time(time) +
  shadow_mark(past = T, future=F, alpha=0.3)
p <- ggplot(data=plot_data,
       aes(x=y, y=x)) +
  geom_point() +
  transition_time(time) +
  shadow_mark(past = T, future=F, alpha=0.3)

p + geom_line() +
  transition_reveal(along = time) +
  shadow_mark(past = T, future=F, alpha=0.3) 
plot_data %>%
  uncount(100, .id = "frame") %>%
  filter(time <= frame) %>%
  arrange(frame, time) %>%
  group_by(frame) %>%
  mutate(x_lag = lag(x), 
         y_lag = lag(y),
         tail = last(time) - time,
         # Make the points solid for 1 frame then alpha 0.3
         point_alpha = if_else(tail == 0, 1, 0.3),
         # Make the lines fade out over 20 frames
         segment_alpha = pmax(0, (20-tail)/20)) %>%
  ungroup() %>%

  ggplot(aes(x=y, y=x, xend = y_lag, yend = x_lag, group = time)) +
  geom_segment(aes(alpha = segment_alpha)) +
  geom_point(aes(alpha = point_alpha)) +
  scale_alpha(range = c(0,1)) +
  guides(alpha = F) +
  transition_manual(frame)