ggplot 结合 stat_smooth 用于 R 中的某些因子水平

ggplot combined stat_smooth for some factor levels in R

我的数据有 3 个因子水平,每个水平都有一个 x 和 y 坐标。我正在使用 ggplot 创建一个散点图,我想在其中添加平滑。但是,我希望平滑只使用 3 个因子级别中的 2 个。结果应该是这 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)

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

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

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更改美学贴图。