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

如何用ggplot2在同一图中绘制不同数据框的回归曲线?

不合并数据框在ggplot2中绘制两组回归对比图

你可以通过为每个geom图层单独指定data参数来实现,无需合并数据框。以下是两种常用方案:

方案1:直接在ggplot中拟合回归线

这种方法不需要提前拟合回归模型,让ggplot2自动计算并绘制:

library(ggplot2)

# 初始化画布,逐图层添加两组数据
ggplot() +
  # 第一组:My_Data_1的散点和回归线
  geom_point(data = My_Data_1, aes(x = X, y = Y), color = "blue", alpha = 0.6) +
  geom_smooth(data = My_Data_1, aes(x = X, y = Y), method = "lm", se = FALSE, color = "blue") +
  # 第二组:My_Data_2的散点和回归线
  geom_point(data = My_Data_2, aes(x = X, y = Y_prime), color = "red", alpha = 0.6) +
  geom_smooth(data = My_Data_2, aes(x = X, y = Y_prime), method = "lm", se = FALSE, color = "red") +
  # 自定义标签和主题
  labs(x = "X", y = "Y / Y'", title = "两组回归结果对比") +
  theme_minimal()
  • alpha参数可以降低点的透明度,避免重叠遮挡
  • 若需要显示回归线的置信区间,将se = FALSE改为se = TRUE即可

方案2:基于预拟合的回归模型绘制

如果你已经提前拟合了回归模型,可以用geom_abline直接添加回归线:

# 假设已拟合好的模型
model1 <- lm(Y ~ X, data = My_Data_1)
model2 <- lm(Y_prime ~ X, data = My_Data_2)

# 绘图
ggplot() +
  geom_point(data = My_Data_1, aes(x = X, y = Y), color = "blue", alpha = 0.6) +
  geom_abline(intercept = coef(model1)[1], slope = coef(model1)[2], color = "blue", linewidth = 1) +
  geom_point(data = My_Data_2, aes(x = X, y = Y_prime), color = "red", alpha = 0.6) +
  geom_abline(intercept = coef(model2)[1], slope = coef(model2)[2], color = "red", linewidth = 1) +
  labs(x = "X", y = "Y / Y'", title = "两组回归结果对比(预拟合模型)") +
  theme_minimal()

进阶:添加图例区分组别

如果需要更规范的图例,可以将颜色映射到aes中:

ggplot() +
  geom_point(data = My_Data_1, aes(x = X, y = Y, color = "第一组")) +
  geom_smooth(data = My_Data_1, aes(x = X, y = Y, color = "第一组"), method = "lm", se = FALSE) +
  geom_point(data = My_Data_2, aes(x = X, y = Y_prime, color = "第二组")) +
  geom_smooth(data = My_Data_2, aes(x = X, y = Y_prime, color = "第二组"), method = "lm", se = FALSE) +
  labs(x = "X", y = "Y / Y'", title = "两组回归结果对比", color = "组别") +
  scale_color_manual(values = c("第一组" = "blue", "第二组" = "red")) +
  theme_minimal()

注意事项

  • 确保两个数据框中X变量的取值范围匹配,若差异较大,可以用coord_cartesian(xlim = c(min_val, max_val))手动调整x轴范围(该方法不会删除超出范围的数据,仅缩放显示)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:50:38