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

