gganimate中shadow_mark无法排除geom_line图层问题求助
解决gganimate shadow_mark仅保留指定图层轨迹的问题
问题原因
你遇到的问题是shadow_mark的exclude_layer参数未正确覆盖所有不需要保留阴影的图层。shadow_mark的图层计数仅针对ggplot中的几何/统计图层(geom_*和stat_*),标度类设置(比如scale_y_continuous)不属于计数范围。你的图层实际顺序为:
- 图层1:
stat_function(fun=f) - 图层2:
stat_function(fun=g) - 图层3:
geom_point(data=df3) - 图层4:
geom_line(data=df3) - 图层5:
geom_point(红色点)
之前仅排除了前2个图层,导致第3、4层的阴影仍被保留,出现了不需要的线条轨迹。
解决方案
修改shadow_mark的参数,排除前4个图层,仅保留第5个红色点图层生成阴影:
try_anim = ggplot(data = df) + scale_y_continuous(limits = c(0,1)) + stat_function(data=df["mu_s1"], fun = f, linetype = "dashed", color="black") + stat_function(data=df["mu_s1"], fun = g, color="black", na.rm = TRUE) + geom_point(data = df3, aes(x=a, y=g_a, group = t), size = 1.5) + geom_line(data = df3, aes(x=a, y=g_a, group = t), size = 1.5) + geom_point(aes(x=mu_s1, y=z), color = "red", size = 2.5) + transition_time(t) + # 排除前4个图层,仅保留红色点图层的阴影 shadow_mark(color="red", size = 1, exclude_layer = 1:4) animate(try_anim, fps = 10, duration = 10, renderer = gifski_renderer("~/tryanim.gif"))
或者更直观地,用include_layer直接指定要保留阴影的图层:
shadow_mark(color="red", size = 1, include_layer = 5)
两种方式都能让动画仅保留红色点的轨迹阴影,去掉不需要的线条和黑色点的阴影。
内容的提问来源于stack exchange,提问作者trembling_hands
相关产品推荐
相关产品推荐

