geom_smooth中的color =“black”使用R gglplot2更改lm行。为什么?

时间:2018-03-19 07:55:45

标签: r ggplot2

我的示例是使用简单的可用数据制作的:

data(Salaries, package="car")
library(tidyverse)

运行时:

ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank))+
geom_point() +
geom_smooth(method="lm", size=0.5)+
facet_grid(~sex)

我得到了这个图表,为每个等级创建了一条lm行:

enter image description here

但是当我使用

ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank))+
geom_point() +
geom_smooth(method="lm", colour="black", size=0.5)+
facet_grid(~sex)

图表现在显示所有数据的唯一lm行:

enter image description here

知道发生了什么事吗?为什么设置color =“black”会改变图形中lm线的整体外观?

2 个答案:

答案 0 :(得分:4)

美学在每一层都被重复使用:来自help(aes)

提供给ggplot()的美学被用作每一层的默认值。 您可以覆盖它们,或为每个图层提供不同的美学

当您将 color 定义为排名级别时,ggplot会这样做。当您在geom_smooth的调用中覆盖颜色设置(排名级别)时,ggplot会删除绘制该行的级别。

您可以使用fillshape=21并使用color作为这样的行解决此问题:

ggplot(Salaries, aes(x=yrs.since.phd, y=salary, fill=rank))+
  geom_point(shape=21) +
  geom_smooth(method="lm", 
              color="black",
              size=0.5)+
  facet_grid(~sex)

se=FALSE添加到geom_smooth的调用中会丢弃彩色标准错误间隔。

产生这个情节:

enter image description here

答案 1 :(得分:3)

这是因为通过在color中指定geom_smooth,您将覆盖代码顶行中设置的美学。如果您希望所有群组的行都是黑色,则可以通过以下方式group使用geom_smooth - 审美:

ggplot(Salaries, aes(x=yrs.since.phd, y=salary, colour=rank))+
  geom_point() +
  geom_smooth(aes(group=rank), method="lm", color = "black", size=0.5)+
  facet_grid(~sex)    

enter image description here