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

如何在ggplot图形的单独行添加回归直线方程与R²

让ggplot回归方程与R²各占单独一行的解决方案

刚好之前用过那个热门的lm_eqn函数,要把回归直线方程和R²分成单独两行其实很简单,只需要调整表达式里的排版逻辑——用ggplot支持的atop()函数来实现多行显示就可以了。

修改后的函数代码

lm_eqn <- function(df){
  m <- lm(y ~ x, df)
  # 用atop()将方程和R²拆分为上下两行
  eq <- substitute(
    atop(italic(y) == a + b %.% italic(x), 
         italic(r)^2 ~ "=" ~ r2),
    list(
      a = format(coef(m)[1], digits = 2),
      b = format(coef(m)[2], digits = 2),
      r2 = format(summary(m)$r.squared, digits = 3)
    )
  )
  as.character(as.expression(eq))
}

核心改动说明

原来的函数用逗号加空格把方程和R²连在一行,现在换成atop()函数:它会把第一个参数(回归方程)放在上一行,第二个参数(R²值)放在下一行,完全符合你要的分行需求。

完整使用示例

用经典的mtcars数据集演示完整流程:

library(ggplot2)

# 绘制基础散点图+线性回归线
p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point(color = "#2c3e50") +
  geom_smooth(method = "lm", se = FALSE, color = "#e74c3c")

# 添加分行的回归方程与R²
p1 <- p + 
  geom_text(
    x = 4, y = 30,  # 根据你的图表调整坐标位置
    label = lm_eqn(mtcars),
    parse = TRUE,  # 必须开启parse才能解析表达式
    size = 4,
    color = "#2c3e50"
  )

print(p1)

小提示

如果需要调整两行的间距或者字体样式,可以在atop()里搭配textstyle()等函数微调,比如atop(textstyle(italic(y) == a + b %.% italic(x)), italic(r)^2 ~ "=" ~ r2),不过默认格式一般就能满足需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:12:46