使用R中的ggplot2格式化回归线方程



我很好奇如何编辑Jayden的以下解决方案,使方程的格式可以是y=bx+a或y=bx-a?我想让它看起来尽可能干净。

  lm_eqn = function(m) {
  l <- list(a = format(coef(m)[1], digits = 2),
      b = format(abs(coef(m)[2]), digits = 2),
      r2 = format(summary(m)$r.squared, digits = 3));
  if (coef(m)[2] >= 0)  {
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,l)
  } else {
    eq <- substitute(italic(y) == a - b %.% italic(x)*","~~italic(r)^2~"="~r2,l)    
  }
  as.character(as.expression(eq));                 
}

我已尝试在%.%中消除这引发了一个错误,我已经尝试反转顺序,但函数的if/else部分的语法有问题。我还想让它成为公式的格式,使得coeff(a)不带负号。abs(a)返回|a|。感谢您的意见!非常感谢!

这来自另一个线程(在图上添加回归线方程和R2)

如果你想要b*x+a形式的,那么只需:

if (coef(m)[2] >= 0)  {
    eq <- substitute(italic(y) == 
                 b %.% italic(x) + a*","~~italic(r)^2~"="~r2, l)
  } else {
    eq <- substitute(italic(y) == 
               - b %.% italic(x) + a *"," ~~ italic(r)^2 ~"="~r2, l)  
  }

编写R表达式需要理解有一个语法规则:标记/分隔符/标记,但可以使用"+"或"-"作为一元分隔符。中绘图符号表的上部?plotmath具有可接受的分隔符。空格和换行符将被忽略。

您看到了什么错误?这适用于我按照要求提供bx ± a。您必须将abs()移动到a而不是b的定义,并测试coef(m)[1]而不是2…

lm_eqn = function(m) {
  l <- list(a = format(abs(coef(m)[1]), digits = 2),
      b = format(coef(m)[2], digits = 2),
      r2 = format(summary(m)$r.squared, digits = 3));
  if (coef(m)[1] >= 0)  {
    eq <- substitute(italic(y) ==  b %.% italic(x) + a*","~~italic(r)^2~"="~r2,l)
  } else {
    eq <- substitute(italic(y) ==  b %.% italic(x) - a*","~~italic(r)^2~"="~r2,l)    
  }
  as.character(as.expression(eq));                 
}

最新更新