2012-11-21 25 views
21

Ich habe zwei Diagramme und ich versuche, eine über der anderen zu überlagern:Übereinanderlegen zweier Graphen mit ggplot2 in R

Ein Beispiel des Datenrahmens „ge“ sieht wie folgt aus. In Wirklichkeit gibt es 10 Gene, die mit 200 Proben je, so gibt es 2000 Zeilen und 3 Spalten:

Exp Gene Sample 
903.0 1  1 
1060.0 1  2 
786.0 1  3 
736.0 1  4 
649.0 2  1 
657.0 2  2 
733.5 2  3 
774.0 2  4 

Ein Beispiel des Datenrahmens „avg“ sieht wie folgt aus. Dies ist ein Durchschnitt der Datenpunkte für jedes Gen über alle Proben hinweg. In Wirklichkeit hat dieser Graph 10 Gene, so dass die Matrix 10 Reihen 4COL X ist:

mean  Gene sd   se 
684.2034 1 102.7142 7.191435 
723.2892 2 100.6102 7.044122 

Der erste Graph Graphen, die eine Linie des mittleren Ausdrucks für jedes Gen zusammen mit der Standardabweichung für jeden Datenpunkt.

Die zweite Grafik zeigt die Genexpression in Form einer Linie für jede Probe über alle Gene.

linegraphs <- ggplot(ge, aes(x=Gene, y=Expression, group=Samples, colour="#000099")) + geom_line() + scale_x_discrete(limits=flevels.tge) 

würde Ich magavggraph oben auf Liniendiagramme zu überlagern. Gibt es eine Möglichkeit, dies zu tun? Ich habe versucht avggraph + linegraphs, aber ich bekomme einen Fehler. Ich denke, das liegt daran, dass die Graphen von zwei verschiedenen Datenrahmen erzeugt werden.

Ich sollte auch darauf hinweisen, dass die Achsen beider Graphen gleich sind. Beide Graphen haben die Gene auf der X-Achse und die Genexpression auf der Y-Achse.

Jede Hilfe würde sehr geschätzt werden!

Antwort

21

Eine Möglichkeit besteht darin, den Befehl geom_line für das zweite Diagramm dem ersten Diagramm hinzuzufügen. Sie müssen ggplot sagen, dass diese geom auf einem anderen Datensatz basiert:

ggplot(avg, aes(x=Gene, y=mean)) + 
    geom_point() + 
    geom_line() + 
    geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=.1) + 
    geom_line(data = ge, aes(x=Gene, y=Exp, group=Sample, colour="#000099"), 
      show_guide = FALSE) 

Der letzte geom_line Befehl ist für die Linien auf den Rohdaten Basis zu schaffen. enter image description here

+0

Dank @Sven. Das funktioniert, aber wenn ich das tue, ist die Avg-Linie (in schwarz) hinter den rosa Linien. Und weil in meinen Daten so viele rosa Linien zu sehen sind, können Sie die schwarze nicht sehen. Irgendwelche Vorschläge, wie man es dreht? – Sheila

+1

@ShilaP Ändere einfach die Reihenfolge der geoms: 'ggplot() + geom_line (Daten = ge, aes (x = Gen, y = Exp, Gruppe = Beispiel, color =" # 000099 "), show_guide = FALSE) + geom_line (Daten = Mittelwert, aes (x = Gen, y = Mittelwert)) + geom_errorbar (Daten = Mittelwert, Aes (x = Gen, ymin = Mittelwert-sd, ymax = Mittelwert + Standardabweichung), Breite = .1) + geom_point (Daten = Mittelwert, Aes (x = Gen, y = Mittelwert)) ' –

+0

Got it! Ja, ich dachte, dass es erforderlich wäre, den Code für geom_line() irgendwie umzudrehen, aber ich konnte es nicht genau herausfinden. Danke für Ihre Hilfe! – Sheila