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

为pairs()函数绘制的带回归线的散点图添加斜率系数

实现pairs图上三角显示回归线斜率系数

你只需要自定义一个用于显示斜率的上三角面板函数,替换原来的panel.cor即可,以下是完整实现代码:

# 定义回归线绘制函数
reg <- function(x, y, col) abline(lm(y~x), col=col) 

# 自定义下三角面板:散点+回归线
panel.lm =  function (x, y, col = par("col"), bg = NA, pch = par("pch"), 
                      cex = 1, col.smooth = "red", span = 2/3, iter = 3, ...)  {
  points(x, y, pch = pch, col = col, bg = bg, cex = cex)
  ok <- is.finite(x) & is.finite(y)
  if (any(ok)) reg(x[ok], y[ok], col.smooth)
}

# 自定义上三角面板:显示回归线斜率系数
panel.slope <- function(x, y, digits = 2, cex.cor = 1, ...) {
  # 过滤有效数据点
  ok <- is.finite(x) & is.finite(y)
  if (sum(ok) < 2) {
    text(0.5, 0.5, "-", cex = cex.cor)
    return()
  }
  # 拟合线性模型并提取斜率(第二个系数为x的斜率)
  slope <- coef(lm(y[ok] ~ x[ok]))[2]
  # 格式化斜率文本,保留指定小数位数
  slope_text <- sprintf(paste0("%.", digits, "f"), slope)
  # 在面板中心显示斜率
  text(0.5, 0.5, slope_text, cex = cex.cor)
}

# 生成pairs图
pairs(iris[1:4], panel = panel.lm, upper.panel = panel.slope)

关键部分说明

  • panel.slope函数中,先过滤掉非数值/缺失值,避免拟合模型报错;当有效数据点不足2个时,显示-占位。
  • 通过coef(lm(y~x))[2]提取回归线斜率:线性模型lm(y~x)的系数结果中,第一个是截距,第二个就是x对应的斜率系数。
  • 用sprintf格式化斜率的显示位数,你可以修改digits参数调整小数位数(比如改成3就保留3位小数)。

扩展:同时显示斜率和p值

如果需要在上三角同时展示斜率和对应的显著性p值,可以修改面板函数为:

panel.slope_p <- function(x, y, digits = 2, p_digits = 3, cex.cor = 1, ...) {
  ok <- is.finite(x) & is.finite(y)
  if (sum(ok) < 2) {
    text(0.5, 0.5, "-", cex = cex.cor)
    return()
  }
  model <- lm(y[ok] ~ x[ok])
  slope <- coef(model)[2]
  p_val <- summary(model)$coefficients[2,4]
  # 分行显示斜率和p值
  display_text <- sprintf("slope: %.%df\np: %.%df", digits, slope, p_digits, p_val)
  text(0.5, 0.5, display_text, cex = cex.cor)
}

# 调用时替换upper.panel参数
pairs(iris[1:4], panel = panel.lm, upper.panel = panel.slope_p)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:33