在我以前使用的R/R-Studio版本中,当将回归公式应用于ggplot时,我会得到一个正确呈现回归方程的图。但是,现在我已经切换到Rv3.5.3,我在回归行中获得了额外的字符。我已经修改了前面的一个问题(Adding Regression Line Equation and R2 on SEPARATE LINES graph)作为示例:
library(ggplot2)
set.seed(5)
df <- data.frame(x = c(1:50))
df$y <- df$x + rnorm(50, sd=5)
lm_eqn <- function(df){
m <- lm(y~x, df)
eq <- substitute(italic(hat(y)) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
list(a = format(coef(m)[1], digits=3),
b = format(coef(m)[2], digits=3),
r2 = format(summary(m)$r.squared, digits=3)))
as.character(as.expression(eq))}
ggplot(data=df, aes(x=x, y=y))+
geom_smooth(method="lm", se=FALSE, color="black", formula=y~x)+
geom_point()+
geom_text(x=10, y=50, label=lm_eqn(df), parse=TRUE)我希望回归行文本是
y^=-0.162+1.02.x,r²=0.886
然而,出现的是
y^=c(-0.162)+c(1.02)·x,r²=0.886
有没有办法删除c和(),这在前面的ggplot中没有显示,或者这是一个bug?
发布于 2019-04-16 03:50:39
谢谢杰克的回答。我希望保留lm_eqn函数的格式,使其具有yhat和斜体,但您的响应让我重新考虑了原始代码。在尝试了更多之后,我将代码修改为:
lm_eqn <- function(df){
m <- lm(y~x, df)
eq <- substitute(italic(hat(y)) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
list(a = signif(m$coef[[1]], 3),
b = signif(m$coef[[2]], 3),
r2 = signif(summary(m)$r.squared, 3)))
as.character(as.expression(eq))}这有一个幸运的结果,情节现在呈现为:

因此,从去年开始,在系数周围额外包含一组[]是必要的。再次感谢您为我指明了解决方案!
发布于 2019-04-13 00:02:45
然而,这里是一个开始,在你觉得有必要的时候调整数学文本的格式:
library(ggplot2)
set.seed(5)
df <- data.frame(x = c(1:50))
df$y <- df$x + rnorm(50, sd=5)
mod <- lm(y~x, df)
label <- paste('y = ', round(mod$coefficients[[1]],2), ' + ', round(mod$coefficients[[2]],2),
'x', ', r^2 = ', round(summary(mod)$adj.r.squared,2), sep='')
ggplot(data=df, aes(x=x, y=y))+
geom_smooth(method="lm", se=FALSE, color="black", formula=y~x)+
geom_point()+
geom_text(x=10, y=50, label=label)

https://stackoverflow.com/questions/55655129
复制相似问题