是否有一个 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))
借助 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))