向绘图添加统计信息 (ggplot2)
Adding stats to a plot (ggplot2)
给定一个数据框,如:
df1= data.frame(x = c(1:50))
df1$val=df1$x*(-0.35)
我使用了 ggplot2 并使用命令
添加了一条回归线
t=ggplot(df1, aes(x=val, y=x))+geom_smooth(method=lm) + geom_point()
为了添加方程式和 r 值,我尝试了这个问题的代码 Adding Regression Line Equation and R2 on graph
但我收到错误
Error in terms.formula(formula, data = data) :
'data' argument is of the wrong type
关于如何解决这个问题有什么想法吗?
编辑
我用的代码
my_sts <- function(df1){
m <- lm(df1$x ~ df1$val, df1);
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));
}
tgen = t + geom_text(x = -10, y = 50, label = eq(df1), parse = TRUE)
这是从控制台会话中复制的。我更正了两件我认为是错误的事情:1)正如我评论中提到的,当你有数据参数时,你不应该在公式中使用 df1$,以及 2)我认为你的意思是使用 my_sts(df1)
> df1= data.frame(x = c(1:50))
> df1$val=df1$x*(-0.35)
> my_sts <- function(df1){
+ m <- lm(x ~ val, df1);
+ 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));
+ }
> t=ggplot(df1, aes(x=val, y=x))+geom_smooth(method=lm) + geom_point()
> tgen = t + geom_text(x = -10, y = 50, label = eq(df1), parse = TRUE)
Error in layer(data = data, mapping = mapping, stat = stat, geom = GeomText, :
could not find function "eq"
> tgen = t + geom_text(x = -10, y = 50, label = my_sts(df1), parse = TRUE)
Warning message:
In summary.lm(m) : essentially perfect fit: summary may be unreliable
> print(tgen)
似乎打印得很好:请注意 x 和 y 的角色是相反的,因此系数是建模因子的倒数。
给定一个数据框,如:
df1= data.frame(x = c(1:50))
df1$val=df1$x*(-0.35)
我使用了 ggplot2 并使用命令
添加了一条回归线t=ggplot(df1, aes(x=val, y=x))+geom_smooth(method=lm) + geom_point()
为了添加方程式和 r 值,我尝试了这个问题的代码 Adding Regression Line Equation and R2 on graph
但我收到错误
Error in terms.formula(formula, data = data) :
'data' argument is of the wrong type
关于如何解决这个问题有什么想法吗?
编辑
我用的代码
my_sts <- function(df1){
m <- lm(df1$x ~ df1$val, df1);
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));
}
tgen = t + geom_text(x = -10, y = 50, label = eq(df1), parse = TRUE)
这是从控制台会话中复制的。我更正了两件我认为是错误的事情:1)正如我评论中提到的,当你有数据参数时,你不应该在公式中使用 df1$,以及 2)我认为你的意思是使用 my_sts(df1)
> df1= data.frame(x = c(1:50))
> df1$val=df1$x*(-0.35)
> my_sts <- function(df1){
+ m <- lm(x ~ val, df1);
+ 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));
+ }
> t=ggplot(df1, aes(x=val, y=x))+geom_smooth(method=lm) + geom_point()
> tgen = t + geom_text(x = -10, y = 50, label = eq(df1), parse = TRUE)
Error in layer(data = data, mapping = mapping, stat = stat, geom = GeomText, :
could not find function "eq"
> tgen = t + geom_text(x = -10, y = 50, label = my_sts(df1), parse = TRUE)
Warning message:
In summary.lm(m) : essentially perfect fit: summary may be unreliable
> print(tgen)
似乎打印得很好:请注意 x 和 y 的角色是相反的,因此系数是建模因子的倒数。