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

如何在ggscatter分组散点图中添加全局回归线?

问题

使用R中的ggscatter绘制Pearson相关散点图时,按mycolor列分组着色散点后,工具会为每个分组生成回归线。需求是:保留散点的分组着色,但回归线基于全部数据计算,而非分组计算。

提供的代码示例:

df <- structure(list(my_x = c(131L, 100L, NA, 125L, 50L, 50L, 16L, 
3L, 27L, 96L, 176L, 121L, 129L, 84L, 67L, 35L, 36L, 18L, 29L, 
29L, 26L, 25L, 24L, 20L, 28L, 22L, 25L, 15L, 0L, 18L, 13L, 17L, 
14L, 23L, 27L, NA, 6L, 1L, 7L, 1L, 20L, 30L, 16L, 22L, 23L, 22L, 
17L, 12L, 14L, 28L, 16L, 20L, 44L, 27L, 16L, 6L, 10L, 9L, 16L, 
2L, 43L, 6L, 2L, 0L, 1L, 1L, 1L, 1L, 2L, 1L, 47L, 22L, 7L, 3L, 
4L, 3L, 1L, 1L, 1L, 4L, 4L, 1L, 25L, 3L, 3L, 3L, 6L, 6L, 4L, 
1L, 2L, 2L, 5L, 8L, 3L, 5L, 1L, 1L, 1L, 2L, 3L, 6L, 6L, 4L, 8L, 
1L, 4L, 1L, 5L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 0L, 0L, 
2L, 0L, 1L, 2L, 3L, 3L, 4L, 4L, 3L, 2L, 3L, 1L, 2L, 1L), my_y = c(134L, 
90L, 130L, 134L, 44L, 48L, 17L, 4L, 19L, 97L, 178L, 39L, 132L, 
90L, 35L, 35L, 36L, 18L, 28L, 14L, 25L, 26L, 24L, 18L, 25L, 22L, 
9L, 15L, 0L, 21L, 6L, 15L, 15L, 21L, 27L, 19L, 7L, 0L, 8L, 2L, 
10L, 30L, 19L, 23L, 12L, 23L, 16L, 6L, 14L, 29L, 15L, 12L, 21L, 
14L, 11L, 7L, 5L, 4L, 16L, 5L, 36L, 5L, 2L, 0L, 1L, 1L, 1L, 1L, 
2L, 1L, 50L, 22L, 7L, 3L, 6L, 3L, 1L, 1L, 1L, 4L, 4L, 1L, 21L, 
3L, 3L, 3L, 6L, 7L, 4L, 1L, 2L, 2L, 1L, 6L, 3L, 2L, 1L, 1L, 2L, 
2L, 3L, 2L, 6L, 7L, 6L, 1L, 4L, 1L, 5L, 2L, 1L, 2L, 2L, 2L, 2L, 
1L, 2L, 2L, 1L, 0L, 0L, 2L, 0L, 1L, 2L, 3L, 2L, 4L, 4L, 3L, 2L, 
3L, 1L, 2L, 1L), mycolor = c("color1", "color1", "color1", 
"color1", "color1", "color1", "color1", "color1", "color1", 
"color1", "color1", "color1", "color1", "color1", "color1", 
"color2", "color2", "color2", "color2", "color2", "color2", 
"color2", "color2", "color2", "color2", "color2", "color2", 
"color2", "color2", "color2", "color2", "color2", "color2", 
"color2", "color2", "color2", "color2", "color7", 
"Turtle", "Turtle", "color2", "color2", "color2", "color2", 
"color2", "color2", "color2", "color2", "color2", "color2", 
"color2", "color2", "color2", "color2", "color2", "color2", 
"color2", "color2", "color2", "color3", "color4", 
"color4", "color4", "color4", "color4", 
"color4", "color4", "color4", "color4", 
"color4", "color4", "color4", "color5", 
"color5", "color5", "color5", "color5", 
"color5", "color5", "color5", "color5", 
"color5", "color5", "color5", "color5", 
"color5", "color5", "color6", "color6", "color6", "color6", 
"color6", "color6", "color6", "color6", "color6", "color6", "color6", "color6", 
"color6", "color6", "color6", "color6", "color6", "color6", "color6", "color6", 
"color6", "color6", "color6", "color6", "color6", "color6", "color6", "color6", 
"color6", "color6", "color6", "color6", "color6", "color6", "color6", "color6", "color6", 
"color6", "color6", "color6", "color6", "color6", "color6", "color6", "color6", 
"color6", "color6", "color6", "color6", "color6")), class = "data.frame", row.names = c(NA, 
-135L))

# 分组着色但生成多条回归线
df %>%
  ggscatter(., y="my_y", x="my_x",
            color="mycolor",
            add = "reg.line", conf.int = TRUE, 
            cor.coef = TRUE, cor.method = "pearson")

# 无着色但生成全局回归线
df %>%
  ggscatter(., y="my_y", x="my_x",
            add = "reg.line", conf.int = TRUE, 
            cor.coef = TRUE, cor.method = "pearson")
解决方案

ggscatter本身没有直接参数实现“分组着色+全局回归线”,但可以通过两种方式实现需求:

方法1:ggscatter + ggplot2手动添加全局回归线

先用ggscatter画出分组着色的散点,再用ggplot2的图层添加全局回归线和相关系数:

library(ggpubr)
library(ggplot2)

df %>%
  ggscatter(x = "my_x", y = "my_y", color = "mycolor") +
  # 添加基于全部数据的回归线,se=TRUE显示置信区间
  geom_smooth(aes(x = my_x, y = my_y), method = "lm", se = TRUE, color = "black") +
  # 添加全局Pearson相关系数,可调整label.x/label.y控制位置
  stat_cor(aes(x = my_x, y = my_y), method = "pearson", label.x = 50, label.y = 180)

方法2:纯ggplot2实现

如果不需要ggscatter的预设样式,直接用ggplot2更灵活:

library(ggplot2)

ggplot(df, aes(x = my_x, y = my_y, color = mycolor)) +
  geom_point() +
  # group=1强制忽略分组,使用全部数据拟合回归线
  geom_smooth(aes(group = 1), method = "lm", se = TRUE, color = "black") +
  # 同样用group=1计算全局相关系数
  stat_cor(aes(group = 1), method = "pearson", label.x = 50, label.y = 180) +
  theme_bw() # 可选,匹配ggscatter默认主题风格

内容的提问来源于stack exchange,提问作者MaximeP91

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:36:07