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

如何在R中基于group_by生成的散点图叠加不同回归模型的拟合曲线

R 语言 ggplot2 不同分组绘制不同回归模型曲线的实现方案

确保已加载tidyverse套件(包含dplyr、ggplot2等所需工具包),无需合并不同类型的模型对象,按分组生成拟合值数据集后传入绘图图层即可实现需求,具体代码如下:

步骤1:生成分组拟合线数据集

fit_data <- df %>%
  group_by(Id) %>%
  group_modify(~ {
    if (.y$Id == "Ga") {
      # Ga组拟合线性模型
      mod <- lm(Increment ~ Weight, data = .x)
      # 在Ga组Weight取值范围内生成100个均匀分布的点用于绘制平滑曲线
      x_seq <- seq(min(.x$Weight), max(.x$Weight), length.out = 100)
      data.frame(Weight = x_seq, Increment = predict(mod, newdata = data.frame(Weight = x_seq)))
    } else if (.y$Id == "Aa") {
      # Aa组拟合指数模型
      mod <- lm(log(Increment) ~ Weight, data = .x)
      x_seq <- seq(min(.x$Weight), max(.x$Weight), length.out = 100)
      # 对log转换后的预测值做exp还原,匹配原始Increment的量纲
      data.frame(Weight = x_seq, Increment = exp(predict(mod, newdata = data.frame(Weight = x_seq))))
    } else {
      # Za组不生成拟合数据,直接返回空
      NULL
    }
  }) %>%
  ungroup()

步骤2:绘制最终图形

ggplot(df, aes(x = Weight, y = Increment, color = Id)) +
  geom_point() +
  # 传入自定义拟合数据集绘制回归曲线,linewidth可按需调整粗细
  geom_line(data = fit_data, linewidth = 1)

实现逻辑说明

  • 用group_modify按Id字段分组处理数据,根据分组类别选择对应的模型进行拟合
  • 对需要绘制曲线的分组,在自变量的取值范围内生成均匀分布的序列,计算对应预测值生成平滑曲线所需的数据集
  • 指数模型拟合时对因变量做了log转换,预测值需要调用exp()还原到原始数据的量纲
  • Za组直接返回空值,不会生成拟合数据,自然不会在图中绘制曲线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:30:00