2009-11-06 64 views
0

我正在绘制一组曲线,使用ggplot2中的facet。我希望将平滑点应用于有足够平滑点的地块,但不适用于点数很少的地块。特别是,如果其中一个面板只有1或2个点,我想停止绘图失败。ggplot2中的每个面板平滑

例子:

a <- data.frame(x=1:100, y=sin(seq(0.1,10,0.1))) 
b <- data.frame(x=1:5, y=sin(seq(0.1,0.2,0.1))) 
l <- melt(list(a=a,b=b),id.vars="x") 
qplot(x, value, data=l) + geom_smooth() + facet_wrap(~ L1) 
+1

你检查过这个问题了吗? http://stackoverflow.com/questions/1570379/adding-statsmooth-in-to-only-1-facet-in-ggplot2 – 2009-11-06 15:34:38

+0

是的。要让数据的一个子集更平滑,并不容易,因为它要面对的 - 我必须弄清楚哪些方面有足够的数据,然后将这些方面从原始数据中分类出来。 着色不起作用,因为我试图停止运行平滑器 – 2009-11-06 15:46:08

+0

请提供一个小的可重现示例 – hadley 2009-11-06 16:16:19

回答

4

试试这个

library(ggplot2) 
a <- data.frame(x=1:100, y=sin(seq(0.1,10,0.1))) 
b <- data.frame(x=1:2, y=sin(seq(0.1,0.2, length = 2))) 
l <- melt(list(a=a,b=b),id.vars="x") 

more_than <- function(n) { 
    function(df) { 
    if (nrow(df) > n) { 
     df 
    } 
    } 
} 

lbig <- ddply(l, "L1", more_than(5)) 

qplot(x, value, data=l) + geom_smooth() + facet_wrap(~ L1) 
qplot(x, value, data=l) + geom_smooth(data = lbig) + facet_wrap(~ L1) 
+0

太棒了!我之前没有使用ddply,或者将不同的数据输入geoms。这开启了整个世界的可能性。谢谢! – 2009-11-07 17:07:01