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

如何使用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" # 去掉图例边框
)

关键步骤解释

  1. 保存绘图对象:调用twoord.plot()时一定要把结果赋值给一个变量(比如plot_obj),这个对象里的y2trans函数是右轴数据转换为左轴坐标的关键——因为双Y轴本质是把右轴数据缩放适配左轴的绘图范围,直接画右轴回归线会位置错误,必须用这个转换函数处理预测值。
  2. 拟合回归模型:用基础R的lm()函数分别拟合两组数据的线性回归,predict()函数可以生成回归线上的预测值。
  3. 绘制回归线:
    • 左轴的回归线直接用lines()绘制,因为它使用的是原始左轴坐标,不需要转换。
    • 右轴的回归线必须用plot_obj$y2trans()把预测的Y2值转换为左轴坐标,才能在图上正确显示。
  4. 自定义样式:你可以根据需求修改颜色(col)、线宽(lwd)、线型(lty)和点样式(pch)。

如果你的已有代码已经创建了双Y轴图,只需要加入拟合回归模型、绘制回归线的部分即可~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:17:52