如何用ggplot绘制回归线?

Posted

技术标签:

【中文标题】如何用ggplot绘制回归线?【英文标题】:How to plot regression line with ggplot? 【发布时间】:2017-01-21 01:14:40 【问题描述】:

我试图将两条回归线放入同一个图中。我可以使用下面的代码来做到这一点,但线条颜色相同:

model1 <- glm(species~logarea, family=poisson, data=fish)
model2 <- glm.nb(species~logarea, data=fish)

plot(species~logarea,data=fish)
lines(fitted(model1)[order(logarea)]~sort(logarea),data=fish)
lines(fitted(model2)[order(logarea)]~sort(logarea),data=fish)

我正在考虑使用 ggplot 来复制上面的图,这样我就可以用不同的颜色显示不同的线。但我不知道该怎么做。

我只完成了绘制散点图的第一步,但不知道如何在上面添加线条。

ggplot(fish,aes(fish$logarea,fish$SPECIES))+geom_point()

我做了一些搜索,我知道我可以使用 geom_smooth(method = "glm") 来生成回归线。但是好像不是基于我建的模型。

有人能解释一下吗?

非常感谢。

【问题讨论】:

【参考方案1】:

只需添加geom_line(aes(y=fitted_datas)),例如:

data("mtcars")
library(ggplot2)
model <- glm(mpg~hp, family=poisson, data=mtcars)
ggplot(mtcars,aes(hp,mpg))+geom_point()+geom_line(aes(y=fitted(model)))

结果:

【讨论】:

非常感谢您的回复,Arault。它适用于我的代码。【参考方案2】:

您可以直接在geom_smooth 中拟合模型。在这种情况下,您需要使用 method.args 参数为拟合方法提供额外的参数来定义 glm 的族。

这是一个示例,为每种模型类型添加不同的颜色。我使用se = FALSE 删除置信区间。

ggplot(fish,aes(logarea, SPECIES)) + 
    geom_point() +
    geom_smooth(method = "glm", method.args = list(family = poisson), aes(color = "poisson"), se = FALSE) +
    geom_smooth(method = MASS::glm.nb, aes(color = "NB"), se = FALSE)

【讨论】:

以上是关于如何用ggplot绘制回归线?的主要内容,如果未能解决你的问题,请参考以下文章

如何用图书馆(地图)和ggplot绘制R中的东非(肯尼亚,乌干达和坦桑尼亚)地图?

ggplot2:绘制具有不同截距但具有相同斜率的回归线

在ggplot2中绘制没有交互的线性回归线

在 ggplot2 中绘制多重回归线

ggplot2 热图绘制

将 SMA 回归线(smatr 包)绘制到 ggplot 中