Add regression line equation and R^2 on graph

后端 未结 9 2202
梦如初夏
梦如初夏 2020-11-21 07:24

I wonder how to add regression line equation and R^2 on the ggplot. My code is:

library(ggplot2)

df <- data.frame(x = c(1:100))
df$y <- 2         


        
9条回答
  •  无人共我
    2020-11-21 07:54

    really love @Ramnath solution. To allow use to customize the regression formula (instead of fixed as y and x as literal variable names), and added the p-value into the printout as well (as @Jerry T commented), here is the mod:

    lm_eqn <- function(df, y, x){
        formula = as.formula(sprintf('%s ~ %s', y, x))
        m <- lm(formula, data=df);
        # formating the values into a summary string to print out
        # ~ give some space, but equal size and comma need to be quoted
        eq <- substitute(italic(target) == a + b %.% italic(input)*","~~italic(r)^2~"="~r2*","~~p~"="~italic(pvalue), 
             list(target = y,
                  input = x,
                  a = format(as.vector(coef(m)[1]), digits = 2), 
                  b = format(as.vector(coef(m)[2]), digits = 2), 
                 r2 = format(summary(m)$r.squared, digits = 3),
                 # getting the pvalue is painful
                 pvalue = format(summary(m)$coefficients[2,'Pr(>|t|)'], digits=1)
                )
              )
        as.character(as.expression(eq));                 
    }
    
    geom_point() +
      ggrepel::geom_text_repel(label=rownames(mtcars)) +
      geom_text(x=3,y=300,label=lm_eqn(mtcars, 'hp','wt'),color='red',parse=T) +
      geom_smooth(method='lm')
    

    Unfortunately, this doesn't work with facet_wrap or facet_grid.

提交回复
热议问题