ggplot2颜色geom_point按因子但geom_smooth基于所有数据

时间:2013-05-15 10:39:11

标签: r ggplot2

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

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

3 个答案:

答案 0 :(得分:24)

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

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

demo chart

第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))

答案 1 :(得分:7)

在我看来,如果您开始使用ggplot功能而不是ggplot(),您会发现qplot更容易。对美学的控制更有意义。在这种情况下,您只需构建基础:

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

然后在顶部构建两个geom

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

enter image description here

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

答案 2 :(得分:2)

我同意@alexwhan和@Dinre之前的答案,即ggplot()+ geom_point(...)+ ...是解决此问题的最佳方法

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

p + geom_smooth(method = 'lm', aes(colour = NA), colour = 'magenta')