How do I place an identical smooth on each facet of a ggplot2 object?

感情迁移 提交于 2019-11-27 07:59:30

问题


Here's an example:

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()  

I'd like to be able to plot the overall smooth on both facets as well as having the facet-specific smooths.

Edit: here's one way.

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)

Thanks for any help!

Andrew


回答1:


Clever trick: setting the faceting variable to 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")

Or if you prefer, use facet_grid(..., margins=TRUE):

p + facet_grid(.~g, margins=TRUE)


来源:https://stackoverflow.com/questions/6673074/how-do-i-place-an-identical-smooth-on-each-facet-of-a-ggplot2-object

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!