You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ggscatter按分组着色时的问题:保留整体Spearman回归线

散点图按分组着色但保留单条整体回归线的解决方法

问题场景

你使用ggscatter绘制散点图时,希望让点按分类变量Core分组着色,但添加color = "Core"或fill = "Core"后,生成了多条分组回归线——而你需要的是一条基于全量数据的Spearman回归线。

初始代码:

q <- ggscatter(ARAL_R, x = "Intl1", y = "Sul1", add = "reg.line", conf.int = TRUE, cor.coef = TRUE, cor.method = "spearman", xlab = "Intl1 (copies/g)", ylab = "Sul1 (copies/g)") + stat_cor(label.y = 1, label.x.npc = "center") + stat_regline_equation(label.y = 0.5, label.x.npc = "center")

问题原因

ggscatter会把你传入的color = "Core"作为全局美学映射,传递给所有后续图层(包括reg.line、stat_cor),导致所有统计计算都按Core分组执行,因此生成了多条回归线。

解决方案

把点的分组着色和整体统计图层分开处理,不让统计图层继承分组映射:

修改后的代码:

q <- ggscatter(ARAL_R, x = "Intl1", y = "Sul1", color = "Core", 
               xlab = "Intl1 (copies/g)", ylab = "Sul1 (copies/g)") +
  # 手动添加全量数据的回归线+置信区间,关闭美学继承
  geom_smooth(method = "lm", se = TRUE, color = "black", 
              inherit.aes = FALSE, data = ARAL_R, aes(x = Intl1, y = Sul1)) +
  # 添加全量数据的Spearman相关系数
  stat_cor(data = ARAL_R, aes(x = Intl1, y = Sul1), 
           method = "spearman", label.y = 1, label.x.npc = "center") +
  # 添加全量数据的回归方程
  stat_regline_equation(data = ARAL_R, aes(x = Intl1, y = Sul1), 
                        label.y = 0.5, label.x.npc = "center")

关键说明

  • inherit.aes = FALSE:强制geom_smooth不使用ggscatter里的color = "Core"分组规则,直接用全量数据计算回归;
  • 每个统计图层都显式指定data = ARAL_R和不带分组的aes,确保所有统计结果都基于完整数据集,而非分组数据。

内容的提问来源于stack exchange,提问作者M.Cairó

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:50:27