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

如何用dplyr分组并绘制两组回归曲线及对应R²值(避免重叠)

解决方案

核心思路是先给数据集新增一个合并后的分组变量,把"Up"/"Down"/"Left"归为同一组,这样ggplot就会基于这个新分组生成回归直线和R²,而非按原始Place单独绘制。

完整代码实现

library(tidyverse)

set.seed(2013)
Place <- sample(c("Up", "Down", "Left", "Special"), 100, replace = TRUE)
Value <- sample(200:1500, 100, replace = TRUE)
Conc <- sample(1:25, 100, replace = TRUE)

df <- tibble(Place, Value, Conc)

# 新增合并分组:将Up/Down/Left归为General组,Special单独一组
df <- df %>%
  mutate(Group = case_when(
    Place == "Special" ~ "Special",
    Place %in% c("Up", "Down", "Left") ~ "General"
  ))

# 绘图:点保留原始Place的颜色,回归直线和R²基于合并后的Group
ggplot(df, aes(Value, Conc)) +
  # 散点:用原始Place区分颜色,保留子类分布观察
  geom_point(aes(color = Place), alpha = 0.7) +
  # 回归直线:基于Group分组,用Group区分颜色
  stat_poly_line(aes(group = Group, color = Group), se = FALSE, linewidth = 1) +
  # R²标注:基于Group,手动指定位置避免重叠
  stat_poly_eq(
    aes(group = Group, color = Group, label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
    parse = TRUE,
    label.x = c(0.2, 0.8),  # 两个标签分别放在x轴20%和80%的位置
    label.y = c(0.9, 0.1)   # 两个标签分别放在y轴90%和10%的位置
  ) +
  labs(
    x = "Value",
    y = "Conc",
    color = "分组",
    title = "两组样本的回归直线与R²"
  ) +
  theme_minimal()

关键说明

  • 新增分组变量Group:用case_when把"Up"/"Down"/"Left"合并为"General"组,确保回归分析针对两大组进行,而非每个小类别。
  • 散点与直线的区分:散点保留原始Place颜色,方便观察单个子类的分布;回归直线和R²基于合并后的Group,只生成两条目标直线。
  • 解决R²重叠:通过label.x和label.y手动指定两个标签的位置,你可以根据自己的数据分布调整这两个参数的数值,适配不同图表布局。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:02:06