【问题标题】:Annotate exponential function ggplot2 with variables用变量注释指数函数 ggplot2
【发布时间】:2021-09-20 22:00:25
【问题描述】:

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

我拟合了一个线性模型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

我使用的示例来自:How to add the exponential regression equation and R2 on ggplot graph,它使用以下代码:

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)),我尝试重新排列它,但没有一次尝试成功

我也尝试了类似的事情,如下所示:Annotate exponential function ggplot2,但他们的方程式使用常量,我有变量,所以我不知道如何用变量替换数字

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

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

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

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

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

    表达式的语法很复杂。我在这里使用了您的假设值。为了清楚起见,我将r 更改为r.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 package (v2.0.1) 于 2021 年 9 月 21 日创建

    【讨论】:

    • 我猜您使用了log() 转换,因为您告诉您适合线性模型。如果您需要为多个绘图自动执行此操作,您还可以使用包“ggpmisc”(我是作者)。
    • 问题不在于向方程添加数字:我的系数存储为变量:例如,您的示例中的 a=13.048。这个答案无助于回答我的问题
    • 请告诉您在拟合中使用的模型公式。我认为在您的第一段代码中,对exp() 的调用应该是a 而不是b
    • @yuliaUU 我编辑了我的答案,展示了如何使用假设变量组装方程。您可以用代码替换 a、b 和 r.squared 以从模型拟合中提取数字。
    • @yuliaUU Stackoverflow 的理念是问题和答案仍然可供未来的用户使用,并且写得很清楚。可以运行代码示例,也许证明触发了错误也很重要。因此,我编辑了您的问题。以后请记住这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多