2010-08-24 6 views
8

Ich habe eine gestapelte areaplot mit ggplot2 gemacht:ggplot2: Overlay Kontrollgruppe Linie auf die Grafik-Panel eingestellt

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 

Es sieht wie folgt aus: stacked area graph

ich eine Überlagerung des Profils hinzugefügt werden soll des Kontrollgraphen (unten rechts) zu allen Graphen in der Ausgabe (Gruppenname == rowH ist die Kontrolle).

Bisher haben meine Bemühungen dies ergab:

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

dists.med.areaplot + cline 

problem graph

ich die 3 rote Linien müssen 1 rote Linie, die die Spitze des dunkelblauen Abschnitt streicht. Und ich brauche diese identische Zeile (die rowH-Zeile), um jedes der Panels zu überlagern.

Die Datenrahmen sieht wie folgt aus:

> 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 ... 

Die rote Linie sollte als die Summe der value bei jedem Startzeit berechnet werden, wobei name = ‚rowH‘. Ich habe versucht, cline die folgenden Möglichkeiten zu erstellen. Jeder führt zu einem Fehler oder einer fehlerhaften Ausgabe:

Gedanken?

ETA:

Es scheint, dass das Problem, das ich mit 'dists' not found aufwies, wurde hat mit der Tatsache zu tun, dass die ursprüngliche Handlung, dists.med.areaplot über qplot erstellt wurde. Um dieses Problem zu vermeiden, kann ich nicht auf einem Qplot aufbauen. Dies ist der Code für das Arbeitsstück:

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 

in diesem graphset resultierende: alt text

Antwort

3

Dieses Lernen R Blog-Post eine Hilfe sein sollte:

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

Es könnte sein, es lohnt sich, die Zusammenfassung außerhalb von ggplot mit plyr zu berechnen.

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

dann fügen Sie es dem Grundstück mit

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

Ich glaube nicht, dass Sie die 'groupname' Variable entfernen möchten. – hadley

+0

Wenn Sie 'Gruppenname' entfernen, wird das dann nicht über alle Facetten geplottet? – JoFrhwld

+0

Hmm, vielleicht habe ich die Frage missverstanden. – hadley