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

