在图上添加回归直线方程和R2

我想知道如何在ggplot上添加回归直线方程和R ^ 2。 我的代码是

 library(ggplot2) df <- data.frame(x = c(1:100)) df$y <- 2 + 3 * df$x + rnorm(100, sd = 40) p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) + geom_point() p 

任何帮助将不胜感激。

这是一个解决scheme

 # GET EQUATION AND R-SQUARED AS STRING # SOURCE: http://goo.gl/K4yh 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)); } p1 <- p + geom_text(x = 25, y = 300, label = lm_eqn(df), parse = TRUE) 

编辑。 我从中找出了这个代码的来源。 这里是链接到ggplot2谷歌组中的原始文章

产量

我已经修改Ramnath的post到a)使更通用,因此它接受线性模型作为参数,而不是数据框和b)更适当地显示底片。

 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)); } 

用法将更改为:

 p1 = p + geom_text(aes(x = 25, y = 300, label = lm_eqn(lm(y ~ x, df))), parse = TRUE) 

我改变了stat_smooth和相关函数的几行来创build一个新的函数,将拟合方程和R平方值相加。 这也会在小平面上工作!

 library(devtools) source_gist("524eade46135f6348140") df = data.frame(x = c(1:100)) df$y = 2 + 5 * df$x + rnorm(100, sd = 40) df$class = rep(1:2,50) ggplot(data = df, aes(x = x, y = y, label=y)) + stat_smooth_func(geom="text",method="lm",hjust=0,parse=TRUE) + geom_smooth(method="lm",se=FALSE) + geom_point() + facet_wrap(~class) 

在这里输入图像说明

我用@ Ramnath的答案中的代码来格式化方程。 stat_smooth_func函数不是很健壮,但是玩起来应该不难。

https://gist.github.com/kdauria/524eade46135f6348140 。 如果出现错误,请尝试更新ggplot2

我在我的包“ggpmisc”中包含了一个统计stat_poly_eq() ,它允许这个答案:

 library(ggplot2) library(ggpmisc) df <- data.frame(x = c(1:100)) df$y <- 2 + 3 * df$x + rnorm(100, sd = 40) my.formula <- y ~ x p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) + stat_poly_eq(formula = my.formula, aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), parse = TRUE) + geom_point() p 

在这里输入图像说明

这个统计量适用于任何多项式,没有缺失项,并希望有足够的灵活性,通常是有用的。 R ^ 2或调整后的R ^ 2标签可以与任何适合lm()的模型公式一起使用。 作为一个ggplot统计,它的行为与组和面都一样。

'ggpmisc'包可以通过CRAN获得。

CRA版本只接受0.2.6版本。

它解决了@shabbychef和@ MYaseen208的评论。

@ MYaseen208这个显示了如何添加一个帽子

 library(ggplot2) library(ggpmisc) df <- data.frame(x = c(1:100)) df$y <- 2 + 3 * df$x + rnorm(100, sd = 40) my.formula <- y ~ x p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) + stat_poly_eq(formula = my.formula, eq.with.lhs = "italic(hat(y))~`=`~", aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")), parse = TRUE) + geom_point() p 

在这里输入图像说明

@shabbychef现在可以将公式中的variables与用于轴标签的variables进行匹配。 用zyreplacex ,可以使用:

 p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) + stat_poly_eq(formula = my.formula, eq.with.lhs = "italic(h)~`=`~", eq.x.rhs = "~italic(z)", aes(label = ..eq.label..), parse = TRUE) + labs(x = expression(italic(z)), y = expression(italic(h))) + geom_point() p 

在这里输入图像说明

正如这些正常的Rparsingexpression式希腊字母现在也可以在方程的lhs和rhs中使用。

[2017-03-08] @elarry编辑更准确地解决原始问题,显示如何在方程和R2标签之间添加逗号。

 p <- ggplot(data = df, aes(x = x, y = y)) + geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) + stat_poly_eq(formula = my.formula, eq.with.lhs = "italic(hat(y))~`=`~", aes(label = paste(..eq.label.., ..rr.label.., sep = "*plain(\",\")~")), parse = TRUE) + geom_point() p 

在这里输入图像说明