使用coord_cartesian限制X轴范围导致ggplot2中stat_smooth生成的置信区间消失问题求助
解决coord_cartesian()导致stat_smooth置信区间消失的问题
我之前也碰到过一模一样的问题!这是R 4.1.0和ggplot2 3.3.5版本之间的兼容性小bug,已经有不少用户在社区反馈过类似情况了。下面给你几个可行的解决办法:
问题根源
R 4.1.0对图形渲染逻辑做了一些调整,而ggplot2 3.3.5没有及时适配这个变化,导致用coord_cartesian()限制X轴范围后,置信区间的阴影图层无法正常渲染。后续更新的ggplot2版本已经修复了这个问题,不过如果暂时不想升级包,也可以用临时方案解决。
具体解决方案
方案1:升级ggplot2到最新版本
这是最彻底的解决方式,新版本已经修复了该兼容性问题,运行以下命令升级即可:
install.packages("ggplot2")
升级后再执行你的代码,置信区间的阴影就能正常显示了。
方案2:保留coord_cartesian特性的临时处理
如果你需要coord_cartesian()只缩放视图、不滤除数据的特性,可以手动限定stat_smooth()的计算数据范围:
library(ggplot2) library(dplyr) mtcars %>% ggplot(aes(x = wt, y = mpg)) + geom_point() + # 只在指定X范围内计算平滑曲线和置信区间 stat_smooth(data = mtcars %>% filter(wt >= 3 & wt <= 4)) + coord_cartesian(xlim = c(3, 4))
方案3:显式强制渲染置信区间
也可以在stat_smooth()里显式声明参数,强制渲染置信区间:
mtcars %>% ggplot(aes(x = wt, y = mpg)) + geom_point() + stat_smooth(se = TRUE, fill = "#69b3a2") + # 显式开启置信区间并指定填充色 coord_cartesian(xlim = c(3, 4))
方案4:用xlim()替代(注意数据过滤差异)
如果可以接受直接滤除X轴范围外的数据,也可以用xlim()代替coord_cartesian(),这样置信区间也能正常显示:
mtcars %>% ggplot(aes(x = wt, y = mpg)) + geom_point() + stat_smooth() + xlim(c(3, 4))
⚠️ 注意:xlim()会直接删除X轴范围外的数据,和coord_cartesian()仅缩放视图的逻辑不同,使用前要确认自己的需求。
内容的提问来源于stack exchange,提问作者microbe
相关产品推荐
相关产品推荐

