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

