2016-04-27 93 views
0

我的数据有3个因子水平,每个因子水平都有一个x和y坐标。我使用ggplot来创建散点图,我想添加一个平滑图。但是,我希望平滑仅使用3个因子水平中的2个。结果应该是这两个因子水平的数据点的单一拟合,但是所有3个水平都是分散的。ggplot合并stat_smooth R中的某些因子水平

例子:

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”。

如何保留第一张图片的散点图并覆盖第二张图片的平滑贴图?

回答

0

stat_smoothdata的说法,你可以用它来建立一个子集:

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改变美学映射。

+0

非常好。正是我在找的东西。谢谢。 – Geoffrey