2009-11-06 16 views
0

Je trace un groupe de courbes en utilisant la facette dans ggplot2. J'aimerais avoir un lissoir appliqué aux parcelles où il y a assez de points pour lisser, mais pas sur les parcelles avec très peu de points. En particulier, je voudrais arrêter l'intrigue échouer lorsque l'un des panneaux n'a que 1 ou 2 points.Lissage par panneau dans ggplot2

Exemple:

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

Avez-vous vérifié cette question à encore? http://stackoverflow.com/questions/1570379/adding-statsmooth-in-to-only-1-facet-in-ggplot2 –

+0

Yup. Il n'est pas facile de donner un sous-ensemble de données à la lisseuse, car il va être facetté - je devrais trouver laquelle des facettes avait assez de données, et puis sous-ensemble seulement ces facettes sur les données d'origine. La coloration ne fonctionne pas, car j'essaie d'arrêter le fonctionnement du lisseur –

+0

Veuillez fournir un petit exemple reproductible – hadley

Répondre

4

Essayez cette

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

Super! Je n'avais pas utilisé ddply auparavant, ou nourri différentes données à geoms. Cela ouvre tout un monde de possibilités. Merci! –