2016-04-27 95 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