gganimate搭配geom_area时view_zoom无法沿x轴逐步缩小如何解决
问题根因
你原代码的问题出在transition_reveal仅控制数据点的显示时机,不会同步告知view_zoom调整x轴的预期范围:前序帧仅2000年单个点可见时,view_zoom默认取点附近极小范围作为视图,全部点显示后才跳转为完整范围,没有过渡效果。
修复方案
手动控制每帧的x轴视图范围,让x轴右边界随帧推进逐步从2000扩展到2050,同步显示对应范围内的面积图,即可实现平滑的逐步缩小直到展示全范围的效果,完整可运行代码如下:
library(gganimate) library(tidyverse) # 构造逐帧数据,每帧对应截止到max_year的所有数据 gif_data <- tibble(year = 2000:2050, value = seq(0.5, 0.3, length.out = 51)) %>% crossing(max_year = 2000:2050) %>% filter(year <= max_year) gif <- ggplot(gif_data, aes(x = year, y = value)) + geom_area() + # 按max_year切换帧,无额外过渡/停留时间 transition_states(max_year, transition_length = 0, state_length = 0) + ggtitle('Frame {frame} of {nframes}') + view_zoom(fixed_y = TRUE) # 渲染参数和原代码一致 animate(gif, fps = 10, duration = 10, height = 337.5, width = 600, units = "px", res = 50, renderer = gifski_renderer()) anim_save("~/Desktop/gif.gif", animation = last_animation())
内容的提问来源于stack exchange,提问作者r-newbie
相关产品推荐
相关产品推荐

