如何在ggplot2对象的每个面上放置相同的光滑?

And*_*son 4 plot r facet ggplot2

这是一个例子:

eg <- data.frame(x = c(1:50, 50:1),  
                 y = c(1:50, 1:50) + rnorm(100),  
                 g = rep(c("a","b"), each=50))  

qplot(x, y, data = eg) +  
  facet_wrap(~ g) +  
  geom_smooth()  
Run Code Online (Sandbox Code Playgroud)

我希望能够在两个方面绘制整体平滑度以及具有小平面特定的平滑度.

编辑:这是一种方式.

my.smooth <- gam(y ~ s(x), data = eg)
my.data <- data.frame(x = 1:50)                                           
my.data$y <- predict(my.smooth, newdata = my.data) 

qplot(x, y, data = eg) + 
    facet_wrap(~ g) + 
    geom_smooth() + 
    geom_smooth(data = my.data)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

安德鲁

小智 6

聪明的诀窍:将faceting变量设置为NULL

library(ggplot2)
eg <- data.frame(x = c(1:50, 50:1),  
                 y = c(1:50, 1:50) + rnorm(100),  
                 g = rep(c("a","b"), each=50))  

p <- qplot(x, y, data = eg) +  
  facet_wrap(~ g) +  
  geom_smooth()

p + geom_smooth(data=within(eg, g <- NULL), fill="red")
Run Code Online (Sandbox Code Playgroud)

或者如果您愿意,请使用facet_grid(..., margins=TRUE):

p + facet_grid(.~g, margins=TRUE)
Run Code Online (Sandbox Code Playgroud)