为何用after_stat作截距时,stat_summary结合hline/vline会生成多线?
关于ggplot2中stat_summary搭配hline/vline生成异常线条的问题
这个奇特的行为曾在StackOverflow的相关讨论中被提及。
现象说明
- 图1:当在
stat_summary中使用计算得到的after_stat(y)作为yintercept,搭配hline几何对象,且未显式传入x美学映射时,会生成多条与数据无明显关联的线条;同理,使用vline几何对象时若未指定y美学映射,xintercept也会出现类似问题。 - 图2:硬编码x(或y)美学映射后,该问题会消失,但这违背了程序化定义截距的初衷——我们希望通过代码逻辑自动计算截距,而非依赖固定的硬编码值。
核心疑问
为什么会出现这种情况?
我已通过自定义stat解决该问题,但也感兴趣是否有使用stat_summary的解决方案。
代码示例
library(ggplot2) library(patchwork) ## 仅用于示例展示 ## 生成多条无关线条的情况 p1 <- ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_summary(aes(yintercept = after_stat(y)), fun = mean, geom = "hline") + labs(title = "图1", caption = "多条无关联线条——对应的数据是什么?") ## 硬编码x后恢复正常的情况 p2 <- ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_summary(aes(x = 1, yintercept = after_stat(y)), fun = mean, geom = "hline") + labs(title = "图2", caption = "硬编码x后多余线条消失") p1 + p2
效果对比图

注:代码创建于2023-04-13,使用reprex v2.0.2
内容的提问来源于stack exchange,提问作者tjebo
相关产品推荐
相关产品推荐

