2010-08-24 16 views
8

Tengo un areaplot apilados hecho con ggplot2:ggplot2: Línea grupo de control de superposición en el panel gráfico fijado

dists.med.areaplot<-qplot(starttime,value,fill=dists,facets=~groupname, 
    geom='area',data=MDist.median, stat='identity') + 
    labs(y='median distances', x='time(s)', fill='Distance Types')+ 
    opts(title=subt) + 
    scale_fill_brewer(type='seq') + 
    facet_wrap(~groupname, ncol=2) + grect #grect adds the grey/white vertical bars 

Se ve así: stacked area graph

Quiero añadir una superposición del perfil del gráfico de control (abajo a la derecha) para todos los gráficos en la salida (groupname == rowH es el control).

Hasta ahora mis mejores esfuerzos han dado esto:

cline<-geom_line(aes(x=starttime,y=value), 
    data=subset(dists.med,groupname=='rowH'),colour='red') 

dists.med.areaplot + cline 

problem graph

necesito las 3 líneas rojas a ser de 1 línea roja que roza la parte superior de la sección de color azul oscuro. Y necesito esa línea idéntica (la línea rowH) para superponer cada uno de los paneles.

La trama de datos tiene el siguiente aspecto:

> str(MDist.median) 
'data.frame': 2880 obs. of 6 variables: 
$ groupname: Factor w/ 8 levels "rowA","rowB",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ fCycle : Factor w/ 6 levels "predark","Cycle 1",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ fPhase : Factor w/ 2 levels "Light","Dark": 2 2 2 2 2 2 2 2 2 2 ... 
$ starttime: num 0.3 60 120 180 240 300 360 420 480 540 ... 
$ dists : Factor w/ 3 levels "inadist","smldist",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ value : num 110 117 115 113 114 ... 

La línea roja debe calcularse como la suma de la value en cada starttime, en nombre de grupo = 'rowH'. Intenté crear cline de las siguientes maneras. Cada resultado es un error o resultado incorrecto:

#sums the entire y for all points and makes horizontal line 
cline<-geom_line(aes(x=starttime,y=sum(value)),data=subset(dists.med,groupname=='rowH'),colour='red') 

#using related dataset with pre-summed y's 
> cline<-geom_line(aes(x=starttime,y=tot_dist),data=subset(t.med,groupname=='rowH')) 
> dists.med.areaplot + cline 
Error in eval(expr, envir, enclos) : object 'dists' not found 

¿Pensamientos?

ETA:

Parece que el problema que tenía con 'dists' not found tiene que ver con el hecho de que la trama inicial, dists.med.areaplot fue creado a través de qplot. Para evitar este problema, no puedo construir en una qplot. Este es el código de la trama de trabajo:

cline.data <- subset(
     ddply(MDist.median, .(starttime, groupname), summarize, value = sum(value)), 
     groupname == "rowH") 
cline<-geom_line(data=transform(cline.data,groupname=NULL), colour='red') 

dists.med.areaplot<-ggplot(MDist.median, aes(starttime, value)) + 
    grect + nogrid + 
    geom_area(aes(fill=dists),stat='identity') + 
    facet_grid(~groupname)+ scale_fill_brewer(type='seq') + 
    facet_wrap(~groupname, ncol=2) + 
    cline 

resultante en este graphset: alt text

Respuesta

3

esta entrada del blog de Aprendizaje R debe ser de alguna ayuda:

http://learnr.wordpress.com/2009/12/03/ggplot2-overplotting-in-a-faceted-scatterplot/

Podría ser vale la pena calcular el resumen fuera de ggplot con plyr.

cline.data <- ddply(MDist.median, .(starttime, groupname), summarize, value = sum(value)) 
cline.data.subset <- subset(cline.data, groupname == "rowH") 

luego añadirlo a la parcela con

last_plot() + geom_line(data = transform(cline.data.subset, groupname = NULL), color = "red") 
+0

No creo que desea eliminar la variable 'groupname'. – hadley

+0

Si elimina 'groupname', ¿no trazará entonces la línea sobre todas las facetas? – JoFrhwld

+0

Hmm, tal vez entendí mal la pregunta. – hadley

Cuestiones relacionadas