首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ggplot:添加回归线方程和带有刻面的R2

ggplot:添加回归线方程和带有刻面的R2
EN

Stack Overflow用户
提问于 2013-10-31 06:34:54
回答 3查看 48.1K关注 0票数 12

我已经用ggplot创建了一个分面散点图,但我正在努力将回归线方程添加到每个分面。没有刻面的简单情况已经回答了here,但此方法不会扩展到刻面图。

有没有办法以一种干净的方式来完成这件事?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-31 08:33:27

下面是一个从这个answer开始的示例

代码语言:javascript
运行
AI代码解释
复制
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));                 
}

创建两个要在其上进行镶嵌的组

代码语言:javascript
运行
AI代码解释
复制
df$group <- c(rep(1:2,50))

为两个组创建公式标签

代码语言:javascript
运行
AI代码解释
复制
eq <- ddply(df,.(group),lm_eqn)

和绘图

代码语言:javascript
运行
AI代码解释
复制
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 

票数 33
EN

Stack Overflow用户

发布于 2013-10-31 06:45:30

这是你想要的吗?

代码语言:javascript
运行
AI代码解释
复制
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)

票数 5
EN

Stack Overflow用户

发布于 2013-10-31 08:36:54

使用gridExtra,您可以像这样排列您的绘图。

代码语言:javascript
运行
AI代码解释
复制
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)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19699858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档