mettere Sovrapposizione di due grafici utilizzando ggplot2 in R




mettere due grafici insieme r (2)

Ho due grafici e sto cercando di sovrapporre uno sull'altro:

Un esempio del riquadro dati "ge" è simile a questo. In realtà ci sono 10 geni con 200 campioni ciascuno, quindi 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 del frame dati "avg" è 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 è 4 righe X 10 righe:

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

Il primo grafico traccia una linea dell'espressione media per ciascun gene insieme alla deviazione standard per ciascun punto di dati.

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

Il secondo grafico traccia l'espressione genica nella forma di una linea per ogni campione attraverso tutti i geni.

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

Mi piacerebbe sovrapporre avggraph a top of 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.

Vorrei 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!


Answer #1

La soluzione alternativa che ho trovato era che invece di unire i due grafici, ho unito i dati. Ho aggiunto una colonna aggiuntiva alla fine dei due dataframes e poi ho eseguito l'operazione rbind su di rbind . L'uso dell'estetica di fill o color per separare i due grafici. Naturalmente nel mio caso la scala utilizzata per l'asse doveva essere la stessa.


Answer #2

Un modo è aggiungere il comando geom_line per il secondo geom_line al primo geom_line . Devi indicare a ggplot che questa geom si basa su un set di dati diverso:

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 serve per creare le linee in base ai dati grezzi.





ggplot2