17

p <- qplot(wt, mpg, data=mtcars, colour=factor(cyl))在 ggplot2 中,从此处获取的以下命令绘制散点图,每个点根据因子着色

我想用 geom_smooth 拟合所有数据,而不考虑因素,但根据因素保持各个点的颜色。p + geom_smooth(method="lm")对每个因素进行线性拟合。我该怎么做呢?

4

3 回答 3

27

您可以通过退出“qplot”包装函数并直接使用“ggplot”和几何函数来相当容易地做到这一点。

ggplot(mtcars, aes(x=wt, y=mpg)) +
    geom_point(aes(colour=factor(cyl))) +
    geom_smooth(method="lm")

演示图

第 1 步:设置您的初始“ggplot”设置。这些是您希望作为几何函数默认值的设置。

ggplot(mtcars, aes(x=wt, y=mpg))

在这种情况下,我们将“mtcars”数据用于所有几何图形,“wt”分配给 x 轴,“mpg”分配给 y 轴。通过在开始时指定这些,我们减少了在复制粘贴到几何函数时搞砸的风险。

第 2 步:绘制点几何图形,使用“cyl”因子为点着色。这就是最初的 'qplot' 函数所做的,但我们更明确地指定了它。

    geom_point(aes(colour=factor(cyl)))

第 3 步:绘制平滑线性模型。这正是 OP 之前写的,但现在着色的美感不再是默认设置的一部分,模型按预期绘制。

    geom_smooth(method="lm")

+将它与et voila链接在一起!

供参考:您可以通过在每一层中明确来轻松地做到这一点,如下所示:

ggplot() +
    geom_point(data=mtcars, aes(x=wt, y=mpg, colour=factor(cyl))) +
    geom_smooth(data=mtcars, method="lm", aes(x=wt, y=mpg))
于 2013-05-15T11:55:24.350 回答
7

在我看来,ggplot如果你开始使用ggplot()函数而不是qplot. 美学的控制更有意义。在这种情况下,您只需构建您的基础:

p <- ggplot(mtcars, aes(wt, mpg))

然后在上面构建两个geoms:

p + geom_point(aes(colour = factor(cyl))) +
  geom_smooth(method = "lm")

在此处输入图像描述

如果那不是你想要的,请告诉我。

于 2013-05-15T11:54:13.397 回答
2

我同意@alexwhan 和@Dinre 先前的回答,即 ggplot() + geom_point(...) + ... 是解决这个问题的最佳方法

但是,如果您只想修改解决方案,请尝试

p + geom_smooth(method = 'lm', aes(colour = NA), colour = 'magenta')
于 2013-05-15T13:07:48.397 回答