2012-11-21 5 views
21

ho due grafici e sto cercando di sovrapporre uno sopra l'altro:Sovrapposizione due grafici che utilizzano ggplot2 in R

Un esempio della data frame "ge" assomiglia a questo. In realtà ci sono 10 geni con 200 campioni ciascuno, così ci sono 2000 righe e 3 colonne:

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 

Un esempio della struttura di dati "medio" simile a questo. Questa è una media dei punti dati per ciascun gene su tutti i campioni. In realtà questo grafico ha 10 geni, quindi la matrice è 4COL X 10 righe:

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

Il primo grafico Grafici una linea dell'espressione media per ogni gene insieme con la deviazione standard per ciascun punto di dati.

Il secondo grafico rappresenta l'espressione genica sotto forma di una linea per ciascun campione su tutti i geni.

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

Vorrei sovrapporre avggraph in cima linegraphs. C'è un modo per fare questo? Ho provato l'algoritmo + linegraphs ma sto ricevendo un errore. Penso che questo sia dovuto al fatto che i grafici sono generati da due diversi frame di dati.

Devo anche sottolineare che gli assi di entrambi i grafici sono gli stessi. Entrambi i grafici hanno i geni sull'asse X e l'espressione genica sull'asse Y.

Qualsiasi aiuto sarebbe molto apprezzato!

risposta

21

Un modo è aggiungere il comando geom_line per il secondo grafico al primo grafico. Avete bisogno di dire che questo ggplot geom si basa su un insieme di dati diversi:

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) 

L'ultimo comando geom_line è per creare le linee sulla base dei dati grezzi. enter image description here

+0

Grazie a @Sven. Questo funziona, tuttavia quando lo faccio la linea AVG (in nero) è dietro le linee rosa. E poiché ci sono così tante linee rosa nei miei dati, non puoi vedere quello nero. Qualche suggerimento su come girarlo? – Sheila

+1

@ShilaP Basta cambiare l'ordine delle geome: 'ggplot() + geom_line (data = ge, aes (x = gene, y = exp, gruppo = campione, colore =" # 000099 "), show_guide = FALSE) + geom_line (data = avg, aes (x = Gene, y = mean)) + geom_errorbar (data = avg, aes (x = Gene, ymin = mean-sd, ymax = mean + sd), width = .1) + geom_point (data = avg, aes (x = Gene, y = mean)) ' –

+0

Trovato! Sì, ho pensato che sarebbe stato necessario capovolgere il codice per geom_line() in qualche modo, ma non riuscivo a capirlo esattamente. Grazie per l'aiuto! – Sheila