ggplot将R中的某些因子级别的stat_smooth结合起来

时间:2016-04-27 20:59:11

标签: r ggplot2 scatter-plot

我的数据有3个因子级别,每个级别都有x和y坐标。我正在使用ggplot创建一个散点图,我想添加一个平滑的。但是,我希望光滑只使用3个因子级别中的2个。结果应该是这两个因子水平中的数据点的单一拟合,但是所有3个级别都是分散的。

示例:

library(ggplot2)
set.seed(123)
data <- data.frame(x=rnorm(300), y=rnorm(300), f=rep(c("a","b","c"), 100))

ggplot(data, aes(x,y,color=f)) +
  geom_point() +
  stat_smooth(method="gam", formula=y~s(x), se=F)

ggplot(data[data$f %in% c("a","b"),], aes(x,y)) +
  geom_point(aes(color=f)) +
  stat_smooth(method="gam", formula=y~s(x), se=F)

enter image description here enter image description here

如您所见,第一张图片分别为所有因素平滑。第二个结合了因子级别“a”和“b”的数据,但那是因为我从数据中删除了“c”。

如何保留第一张图像的散点图并覆盖第二张图像的平滑拟合?

1 个答案:

答案 0 :(得分:0)

stat_smooth有一个data参数,可用于构建子集:

ggplot(data, aes(x,y,color=f)) +
  geom_point() +
  stat_smooth(data=subset(data, f!="c"), 
              inherit.aes=F, aes(x, y),
              method="gam", formula=y~s(x), 
              se=F)

此外,您可以使用inherit.aes=FALSE更改美学映射。