2009-11-06 66 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