是否有一个 ggplot2 函数可以绘制从调用 lm() 的线性模型推断出的直线?

Is there a ggplot2 function that can plot the straight line inferred from a linear model that came from a call to lm()?

借助 base R 的绘图,我可以非常快速地生成我刚刚使用 lm 生成的新线性模型的绘图:

with(mtcars,{
  plot(wt,mpg)
  abline(lm(mpg~wt))})

是否有 ggplot2 等效项?我尝试了 geom_abline,但没有任何迹象表明它适用于 forumla 对象。

明确地说,我不想从线性模型中提取系数并将它们传递给 ggplot。我也不想用 ggplot2 函数生成线性模型。我想要的正是 base R 所拥有的——能够以显示其对应直线的方式将线性模型对象传递给绘图函数。

函数 geom_smooth 可以做类似于你所说的事情,虽然我不认为你可以直接在里面传递对象:

ggplot(mtcars) +
  geom_point(aes(wt, mpg)) +
  geom_smooth(method = lm, aes(wt, mpg))

如果我们可以做一些事情,但不能做您列出的事情,那么我会选择 stat_function:


m <- lm( mpg~wt, data=mtcars )

ggplot( mtcars, aes(x=wt, y=mpg) ) +
    geom_point() +
    stat_function( fun=function(x)predict(m, newdata=data.frame(wt=x)), color="red" )

你可以这样做:

ggplot() +
  geom_point(data = mtcars, aes(wt, mpg)) +
  geom_abline(data = lm(mpg ~ wt, data = mtcars) %>% broom::tidy(), 
              aes(intercept = estimate[1], slope = estimate[2]))

或:

ggplot() +
  geom_point(data = mtcars, aes(wt, mpg)) +
  geom_abline(data = coef(lm(mpg ~ wt, data = mtcars)) %>% t() %>% data.frame(), 
              aes(intercept = X.Intercept., slope = wt))