You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在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

关键说明

  • 为什么要修改formulalog10(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

火山引擎 最新活动