Ggplot: adding a regression line equation and R2 with a face

I created a facet scatter plot with ggplot , but I'm struggling to add the regression line equation to each of the faces. A simple case of no cut was answered here , but this method will not extend to a faceted plot.

Any ideas how to do this in a clean way?

+6
source share
3 answers

Here is an example starting with this answer

 require(ggplot2) require(plyr) df <- data.frame(x = c(1:100)) df$y <- 2 + 3 * df$x + rnorm(100, sd = 40) lm_eqn = function(df){ m = lm(y ~ x, df); eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, list(a = format(coef(m)[1], digits = 2), b = format(coef(m)[2], digits = 2), r2 = format(summary(m)$r.squared, digits = 3))) as.character(as.expression(eq)); } 

Create two groups for which you want to make a face

 df$group <- c(rep(1:2,50)) 

Create tag labels for two groups

 eq <- ddply(df,.(group),lm_eqn) 

And the plot

 p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) + geom_point() p1 = p + geom_text(data=eq,aes(x = 25, y = 300,label=V1), parse = TRUE, inherit.aes=FALSE) + facet_grid(group~.) p1 

enter image description here

+16
source

Does it do what you want?

 library(ggplot2); library(gridExtra) ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point() + geom_smooth(method="lm") + facet_wrap(~ Species) grid.newpage() vpa_ <- viewport(width = 1, height = 1) print(p, vp = vpa_) grid.text("y ~ mx + b", x=0.3, y=0.8) grid.text("y ~ mx + b", x=0.5, y=0.8) grid.text("y ~ mx + b", x=0.8, y=0.8) 

enter image description here

+4
source

Using gridExtra , you can organize your stories as follows.

enter image description here

 library(ggplot2) library(ggplot2) iris$x = iris$Sepal.Length iris$y = iris$Sepal.Width xx <- range(iris$x) yy <- range(iris$y) ll <- by(iris,iris$Species,function(df){ x.eq <- max(xx)-mean(xx)/2 y.eq <- max(yy)*0.95 p <- ggplot(df, aes(x, y)) + geom_point() + geom_smooth(method="lm") + annotate(x=x.eq, y =y.eq , geom='text', label = lm_eqn(df), size=5,parse=TRUE) + xlim(xx[1],xx[2])+ylim(yy[1],yy[2]) }) library(gridExtra) do.call(grid.arrange,ll) 
+3
source

Source: https://habr.com/ru/post/957106/


All Articles