我知道有很多关于向绘图添加 R^2 值的条目,但我在遵循代码时遇到了麻烦。我正在绘制一个包含三个类别的散点图。我为每个都添加了线性回归线。我现在想为每个值添加 r^2 值,但我不知道如何执行此操作。
我的代码:
veg <- read.csv("latandwtall2.csv", header=TRUE)
library("ggplot2")
a <- ggplot(veg, aes(x=avglat, y=wtfi, color=genus)) + geom_point(shape=19, size=4)
b <- a + scale_colour_hue(l=50) + stat_smooth(method = "lm", formula = y ~ x, size = 1, se = FALSE)
c <- b + labs(x="Latitude", y="Weight (g)")
d <- c + theme_bw()
e <- d + theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank())
#changes size of text
f <- e + theme(
axis.title.x = element_text(color="black", vjust=-0.35, size=15, face="bold"),
axis.title.y = element_text(color="black" , vjust=0.35, size=15, face="bold")
)
g <- e+theme(legend.key=element_rect(fill='white'))
g
Run Code Online (Sandbox Code Playgroud)
任何有关如何添加 R^2 值的帮助将不胜感激。谢谢!
如果您使用 r 平方值构建数据框,您可能能够(主要)通过将注释文本作为对geom_text
.
这是一个玩具示例。所述rsq
数据帧中使用geom_text
以将R平方标签。在这种情况下,我已将其设置为将标签放在最高 x 值之后,predict
函数获取 y 值。对于单个情节来说可能工作量太大了,但是如果你经常这样做,你可以把它变成一个函数,这样你就不必每次都重复设置代码,还可以添加一些更高级的逻辑使标签放置更灵活:
library(reshape2) # For melt function
# Fake data
set.seed(12)
x = runif(100, 0, 10)
dat = data.frame(x, y1 = 2*x + 3 + rnorm(100, 0, 5),
y2 = 4*x + 20 + rnorm(100, 0, 10))
dat.m = melt(dat, id.var="x")
# linear models
my1 = lm(y1 ~ x, data=dat)
my2 = lm(y2 ~ x, data=dat)
# Data frame for adding r-squared values to plot
rsq = data.frame(model=c("y1","y2"),
r2=c(summary(my1)$adj.r.squared,
summary(my2)$adj.r.squared),
x=max(dat$x),
y=c(predict(my1, newdata=data.frame(x=max(dat$x))),
predict(my2, newdata=data.frame(x=max(dat$x)))))
ggplot() +
geom_point(data=dat.m, aes(x, value, colour=variable)) +
geom_smooth(data=dat.m, aes(x, value, colour=variable),
method="lm", se=FALSE) +
geom_text(data=rsq, aes(label=paste("r^2 == ", round(r2,2)),
x=1.05*x, y=y, colour=model, hjust=0.5),
size=4.5, parse=TRUE)
Run Code Online (Sandbox Code Playgroud)