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

moa*_*eep 16 r ggplot2

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

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

Din*_*nre 24

您可以通过退回'qplot'包装函数并直接使用'ggplot'和几何函数来相当容易地完成此操作.

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

演示图表

第1步:设置您的初始'ggplot'设置.这些是您希望为几何函数设置的默认设置.

ggplot(mtcars, aes(x=wt, y=mpg))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们对所有几何使用'mtcars'数据,其中'wt'分配给x轴,'mpg'分配给y轴.通过在开头指定这些,我们可以减少在复制粘贴到几何函数时弄乱某些东西的风险.

第2步:绘制点几何,使用'cyl'因子为点着色.这就是最初的'qplot'函数正在做的事情,但我们更明确地指定它.

    geom_point(aes(colour=factor(cyl)))
Run Code Online (Sandbox Code Playgroud)

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

    geom_smooth(method="lm")
Run Code Online (Sandbox Code Playgroud)

将它们与+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))
Run Code Online (Sandbox Code Playgroud)


ale*_*han 7

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

p <- ggplot(mtcars, aes(wt, mpg))
Run Code Online (Sandbox Code Playgroud)

然后geom在顶部构建两个:

p + geom_point(aes(colour = factor(cyl))) +
  geom_smooth(method = "lm")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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