2012-11-21 23 views
21

mam dwa wykresy i staram się nakładać jeden na drugim:Otaczające dwa wykresy wykorzystujące ggplot2 w R

przykładem ramki danych „ge” ​​wygląda tak. W rzeczywistości istnieje 10 Geny z 200 próbek każdego, więc istnieje 2000 wiersze i 3 kolumny:

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 

Przykładem ramki danych „średnio” wygląda tak. Jest to średnia z punktów danych dla każdego genu dla wszystkich próbek. W rzeczywistości jest to wykres 10 genów, więc matryca jest 4col x 10 rzędy:

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

Pierwszy wykres wykresy linii średniej ekspresji każdego genu, oraz odchylenia standardowe dla każdego punktu danych.

avggraph <- ggplot(avg, aes(x=Gene, y=mean)) + geom_point() +geom_line() + geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=.1) 

Drugi wykres przedstawia ekspresję genów w postaci linii dla każdej próbki we wszystkich genach.

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

chciałbym nałożyć avggraph na szczycie linegraphs. Czy jest jakiś sposób na zrobienie tego? Próbowałem avggraph + linegraphs ale dostaję błąd. Myślę, że dzieje się tak dlatego, że wykresy są generowane przez dwie różne ramki danych.

Chciałbym również zwrócić uwagę, że osie obu wykresów są takie same. Oba wykresy mają geny na osi X i ekspresję genu na osi Y.

Każda pomoc będzie bardzo ceniona!

Odpowiedz

21

Jednym ze sposobów jest dodanie polecenia geom_line dla drugiego wykresu do pierwszego wykresu. Trzeba powiedzieć, że ten geom ggplot opiera się na innym zestawie danych:

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) 

Ostatnia komenda geom_line jest do tworzenia linii na podstawie surowych danych. enter image description here

+0

Dzięki @Sven. Działa to jednak, gdy to robię, średnia linia (na czarno) znajduje się za różowymi liniami. A ponieważ w moich danych jest tyle różowych linii, nie widać czarnej. Wszelkie sugestie, jak je przerzucić? – Sheila

+1

@ShilaP Wystarczy zmienić kolejność geomów: 'ggplot() + geom_line (dane = ge, aes (x = Gene, y = Exp, grupa = Sample, color =" # 000099 "), show_guide = FALSE) + geom_line (dane = średnia, aes (x = Gene, y = średnia)) + geom_errorbar (dane = średnia, aes (x = Gene, ymin = średnia-sd, ymax = średnia + sd), szerokość = .1) + geom_point (dane = średnia, aes (x = Gene, y = średnia)) ' –

+0

Gotowy! Tak, pomyślałem, że będzie to wymagało przerzucenia kodu dla geom_line() w jakiś sposób, ale nie udało mi się go dokładnie rozgryźć. Dzięki za pomoc! – Sheila

Powiązane problemy