在Y轴对数刻度的ggplot图中添加回归线方程与R²值求助
在ggplot2对数Y轴图中添加回归线方程和R²值的解决方案
我明白你遇到的问题——用ggplot2做了带对数Y轴的散点图,回归线能正常显示,但就是没法像Excel那样输出对应的回归方程和R²值。核心原因是Y轴做了对数转换,普通的标注方法没适配这个变换,这里给你一个简单的解决方案,用ggpmisc包就能轻松搞定:
步骤1:安装并加载所需工具包
首先确保你安装了ggpmisc,它专门用来在ggplot图中添加统计相关的标注内容:
install.packages("ggpmisc") library(ggpmisc)
步骤2:修改你的ggplot代码
我调整了原代码的两个关键部分:一是让回归线拟合对数转换后的Y值与X的线性关系(这和Excel对数刻度下趋势线的逻辑一致,在log轴上会显示为直线);二是添加stat_poly_eq层来自动生成并标注方程和R²值:
plot_lab_permeability2<- ggplot(Lab_permeability2,aes(void.ratio, permeability_m.s))+ geom_point(size=3,aes(shape = Method, colour = Method))+ # 改为拟合log10(y)~x,对应logY轴上的直线趋势 geom_smooth(method="lm",formula= log10(y) ~ x, se=FALSE, linetype = 8,color="grey") + scale_shape_manual("",breaks = c("Constant load","Variable load","Triaxial test","Oedometric test 1","Oedometric test 2","Oedometric test 3"), values=c("Constant load"=15,"Variable load"=17,"Triaxial test"=18,"Oedometric test 1"=16,"Oedometric test 2"=16,"Oedometric test 3"=16))+ scale_colour_manual("",breaks = c("Constant load","Variable load","Triaxial test","Oedometric test 1","Oedometric test 2","Oedometric test 3"), values = c("Constant load"="darkblue","Variable load"="blue","Triaxial test"="darkgreen","Oedometric test 1"="darkred","Oedometric test 2"="red","Oedometric test 3"="orange"))+ scale_y_continuous(limits = c((1e-9),(1e-4)), trans="log10") + labs(x=expression ("Void ratio (-)"),y = expression ("Saturated hydraulic conductivity (m/s)"),title="") + # 添加回归方程和R²值,自动解析为标准数学公式 stat_poly_eq( formula = log10(y) ~ x, aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), parse = TRUE, size = 4, color = "black" ) + theme_bw() # 绘制最终图形 plot_lab_permeability2
关键说明
- 为什么要修改
formula为log10(y) ~ x?因为你的Y轴是log10转换的,Excel里对数刻度下的趋势线本质就是拟合log(y)和x的线性关系,这样在log轴上显示的是直线,符合直观的可视化逻辑。如果坚持用原代码的y ~ x,回归线在log轴上会呈现曲线形态,对应的方程也不符合图表的表达意图。 stat_poly_eq的参数中,parse=TRUE能让输出的文本被解析成标准的数学公式,sep="~~~"会让方程和R²值在图中自动分行显示,和Excel的效果完全一致。
内容的提问来源于stack exchange,提问作者Raúl Oo




