基于geom_smooth的ggplot中的不同颜色

时间:2015-08-03 08:21:24

标签: r ggplot2

我创建了一个带有线性geom_smooth的ggplot,现在我希望得到点,geom_point在线性平滑线的下方和上方有不同的颜色。

我知道我可以通过geom_point(aes(x, y, colour = z))添加颜色。我的问题是如何确定图中的点是否低于或高于线性线。

可以ggplot2执行此操作还是必须先在数据框中创建新列?

下面是带有geom_smooth的示例代码,但该行上方和下方没有不同的颜色。

感谢任何帮助。

library(ggplot2)

df <-  data.frame(x = rnorm(100),
              y = rnorm(100))

ggplot(df, aes(x,y)) +
 geom_point() +
 geom_smooth(method = "lm")

1 个答案:

答案 0 :(得分:3)

我相信ggplot2不能为你做这件事。如您所说,您可以在df中创建一个新变量来进行着色。您可以根据线性模型的残差来实现。

例如:

library(ggplot2)

set.seed(2015)
df <-  data.frame(x = rnorm(100),
                  y = rnorm(100))

# Fit linear regression
l = lm(y ~ x, data = df)

# Make new group variable based on residuals
df$group = NA
df$group[which(l$residuals >= 0)] = "above"
df$group[which(l$residuals < 0)] = "below"

# Make the plot
ggplot(df, aes(x,y)) +
  geom_point(aes(colour = group)) +
  geom_smooth(method = "lm")

请注意,colour参数必须传递给geom_point(),否则geom_smooth()将分别为每个组生成一个拟合。

结果:

example_regression