如何使用plotrix包在双Y轴图中为两组点分别添加回归线
在plotrix双Y轴图中添加两组数据的回归线
没问题!我来帮你搞定在plotrix双Y轴图上给两组数据分别加回归线的事儿~核心思路是:先为两组数据各自拟合线性回归模型,再结合双Y轴的坐标转换规则,分别把回归线绘制到对应的轴上。
完整示例代码
# 加载plotrix包 library(plotrix) # 生成示例数据(你可以替换成自己的真实数据) set.seed(123) # 设置随机种子保证结果可复现 x <- 1:20 y1 <- 3*x + rnorm(20, 0, 5) # 第一组数据(左Y轴) y2 <- -2*x + rnorm(20, 0, 8) # 第二组数据(右Y轴) # 创建双Y轴散点图,同时保存返回的绘图对象(关键!用于坐标转换) plot_obj <- twoord.plot( x = x, y1 = y1, y2 = y2, type = "p", # 绘制散点 xlab = "自变量X", ylab = "Y1轴", y2lab = "Y2轴", col = "blue", # 左轴数据点颜色 col2 = "red", # 右轴数据点颜色 pch = 16, # 左轴点样式 pch2 = 17, # 右轴点样式 main = "双Y轴图+两组回归线" ) # 为两组数据分别拟合线性回归模型 lm_y1 <- lm(y1 ~ x) # Y1对X的回归 lm_y2 <- lm(y2 ~ x) # Y2对X的回归 # 绘制左轴数据的回归线 lines(x, predict(lm_y1), col = "blue", lwd = 2, lty = 1) # 绘制右轴数据的回归线(必须用plot_obj的转换函数适配坐标) lines(x, plot_obj$y2trans(predict(lm_y2)), col = "red", lwd = 2, lty = 1) # 添加图例,方便区分 legend("topright", legend = c("Y1数据点", "Y1回归线", "Y2数据点", "Y2回归线"), col = c("blue", "blue", "red", "red"), pch = c(16, NA, 17, NA), lty = c(NA, 1, NA, 1), lwd = 2, bty = "n" # 去掉图例边框 )
关键步骤解释
- 保存绘图对象:调用
twoord.plot()时一定要把结果赋值给一个变量(比如plot_obj),这个对象里的y2trans函数是右轴数据转换为左轴坐标的关键——因为双Y轴本质是把右轴数据缩放适配左轴的绘图范围,直接画右轴回归线会位置错误,必须用这个转换函数处理预测值。 - 拟合回归模型:用基础R的
lm()函数分别拟合两组数据的线性回归,predict()函数可以生成回归线上的预测值。 - 绘制回归线:
- 左轴的回归线直接用
lines()绘制,因为它使用的是原始左轴坐标,不需要转换。 - 右轴的回归线必须用
plot_obj$y2trans()把预测的Y2值转换为左轴坐标,才能在图上正确显示。
- 左轴的回归线直接用
- 自定义样式:你可以根据需求修改颜色(
col)、线宽(lwd)、线型(lty)和点样式(pch)。
如果你的已有代码已经创建了双Y轴图,只需要加入拟合回归模型、绘制回归线的部分即可~
内容的提问来源于stack exchange,提问作者just_rookie
相关产品推荐
相关产品推荐

