使用 stat_reg_line() 函数从 ggplot 中删除回归线方程的截距

removing the intercept from regression line equation from ggplot using stat_reg_line() function

我正在将回归线方程添加到我的 ggplot 中。但是,我想从图中删除截距并只保留斜率和 R^2。

这是我用来生成绘图和方程式的代码。您知道如何删除拦截吗?

library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 20 * c(0, 1) + 3 * df$x + rnorm(100, sd = 40)
df$group <- factor(rep(c("A", "B"), 50))
df <- df %>% group_by(group) %>% mutate(ymax = max(y))

df %>%
   group_by(group) %>%
   do(tidy(lm(y ~ x, data = .))) 

p <- ggplot(data = df, aes(x = x, y = y, colour = group)) +
   geom_smooth(method = "lm", se=FALSE, formula = y ~ x) +
   stat_regline_equation(
   aes( x = x, y = y  , label =  paste(..eq.label..,..rr.label.., sep = "~~~~")),
   formula=y~x, size=3, 
   )
p

谢谢,

您可以使用 ggpmisc 包中的 stat_fit_tidy

df <- data.frame(x = c(1:100))
df$y <- 20 * c(0, 1) + 3 * df$x + rnorm(100, sd = 40)
df$group <- factor(rep(c("A", "B"), 50))

library(ggpmisc)
my_formula <- y ~ x

ggplot(df, aes(x = x, y = y, colour = group)) +
  geom_point() +
  geom_smooth(method = "lm", formula = my_formula, se = FALSE) +
  stat_fit_tidy(
    method = "lm",
    method.args = list(formula = my_formula), 
    mapping = aes(label = sprintf('slope~"="~%.3g',
                                  after_stat(x_estimate))),
    parse = TRUE)


编辑

如果您也想要 R 平方:

ggplot(df, aes(x = x, y = y, colour = group)) +
  geom_point() +
  geom_smooth(method = "lm", formula = my_formula, se = FALSE) +
  stat_fit_tidy(
    method = "lm",
    method.args = list(formula = my_formula), 
    mapping = aes(label = sprintf('slope~"="~%.3g',
                                  after_stat(x_estimate))),
    parse = TRUE) + 
  stat_poly_eq(formula = my_formula, 
               aes(label = ..rr.label..), 
               parse = TRUE,
               label.x = 0.6) 


编辑

另一种方式:

myformat <- "Slope: %s --- R²: %s"
ggplot(df, aes(x, y, colour = group)) + 
  geom_point() +
  geom_smooth(method = "lm", formula = my_formula, se = FALSE) +
  stat_poly_eq(
    formula = my_formula, output.type = "numeric",
    mapping = aes(label = 
                    sprintf(myformat,
                            formatC(stat(coef.ls)[[1]][[2, "Estimate"]]),
                            formatC(stat(r.squared)))),
    vstep = 0.1
  )