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

如何在R语言中使用ggplot2叠加两幅回归绘图?

叠加两条回归直线的实现方案

1. 准备可复现数据集

set.seed(123) # 设置随机种子保证结果可复现
x <- rnorm(50, mean = 10, sd = 2)
y <- 0.8*x + rnorm(50, mean = 0, sd = 1.5)
df <- data.frame(x, y)

2. 计算两个回归模型的预测序列

# Y对X的回归模型及预测
model_yx <- lm(y ~ x, data = df)
x_seq <- seq(min(df$x), max(df$x), length.out = 100)
df_yx <- data.frame(x = x_seq, y = predict(model_yx, newdata = data.frame(x = x_seq)))

# X对Y的回归模型(对应coord_flip后的回归逻辑)及预测
model_xy <- lm(x ~ y, data = df)
y_seq <- seq(min(df$y), max(df$y), length.out = 100)
df_xy <- data.frame(x = predict(model_xy, newdata = data.frame(y = y_seq)), y = y_seq)

3. 绘制叠加回归图

library(ggplot2)

ggplot(df, aes(x = x, y = y)) +
  geom_point(alpha = 0.6, size = 2) + # 绘制原始散点
  geom_line(data = df_yx, color = "#E63946", linewidth = 1) + # Y对X的回归线
  geom_line(data = df_xy, color = "#1D3557", linewidth = 1, linetype = "dashed") + # X对Y的回归线
  labs(title = "Y对X与X对Y回归直线叠加图", x = "变量X", y = "变量Y") +
  theme_minimal() +
  scale_color_manual(values = c("#E63946", "#1D3557"), labels = c("Y ~ X", "X ~ Y")) +
  guides(color = guide_legend(title = "回归类型"))

核心思路

直接在同一坐标系中计算两条回归直线的预测序列并绘制,替代“分图后叠加”的复杂操作:

  • Y~X的回归直接以x为自变量预测y,得到常规回归线
  • X~Y的回归以y为自变量预测x,将预测得到的x与输入的y配对,就能在原坐标系中画出对应coord_flip后的回归直线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:50:14