如何用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
相关产品推荐
相关产品推荐

