首页 > 解决方案 > 用变量注释指数函数 ggplot2

问题描述

我正在尝试用方程注释 ggplot 图y=ae^(bx)

我拟合了一个线性模型log(y) ~ x,并得到了系数的估计值:截距和斜率,以及 r^2 值:

a = round(exp(model$coefficients[1]), 2)
b = round(model$coefficients[2], 2)
r = round(summary(model)$r.squared, 2)

我想将拟合模型的方程作为指数添加到 ggplot 图,所以假设我的系数是:

a= -2
b= 0.5
r = 0.76

我使用的示例来自:如何在使用以下代码的 ggplot 图上添加指数回归方程和 R2:

eq <- paste0('paste(y, " = ", italic(e^{',  round(exp.mod$coefficients[2], 2), 
             "*x ~~+~~ ", round(exp.mod$coefficients[1], 2),
             '}), ~~~~~~~~R^2~ "="~', round(summary(exp.mod)$r.squared, 2), ")")

但这给出了一个有点不同的公式(y = e ^(ax + b)),我试图重新排列它,但没有一个尝试成功

我也尝试了类似的事情,如下所示:注释指数函数 ggplot2但他们使用常量作为他们的方程并且我有变量,所以我不知道如何用变量替换数字

最后,为了将方程添加到绘图中,我尝试使用以下行:

ggplot()+
annotate("text", aes(x=3, y=11), label = "y == a*e^{b*x}", parse =TRUE)

标签: rggplot2

解决方案


您的最后一行代码存在问题:1)annotate()不支持将数据中的变量映射到美学,一个只是常量值作为参数;2) 整个上标,包括减号必须放在大括号内。(等式看起来更好一些*,将指数前面的替换~为增加一点空间,但这是可选的。)

library(ggplot2)
ggplot()+
  annotate("text", x=3, y=11, label = "y == 13.048*e^{-0.697*x}", parse =TRUE)

表达式有一个棘手的语法。我在这里使用了您的假设值。为了清楚起见,我改成rr.squared

a= -2
b= 0.5
r.squared = 0.76

eq <- paste0('y~`=`~',  a,
             '~e^{', b , 
             '*x}*"; "*R^2~`=`~', r.squared)

ggplot()+
  annotate("text", x=3, y=11, label = eq, parse =TRUE)

reprex 包于 2021-09-21 创建(v2.0.1)


推荐阅读