2012-09-17 11 views
8

Eventuali duplicati:
How to overlay density plots in R?Come ottenere più linee in un grafico a densità singola, con una scala corretta?

recente ho iniziato a lavorare con set di dati di microarray e sto cercando di mettere le mani su R. Vorrei fare alcuni appezzamenti fuori dei miei dati dei risultati, ma comunque sono bloccato al seguente.

Ho i seguenti dati (myData),

cpg samp1 samp2 samp3 
cpg1 0.43 0.32 0.21 
cpg2 0.43 0.22 1.00 
cpg3 0.11 0.99 0.78 
cpg4 0.65 0.32 0.12 
cpg5 0.11 0.43 0.89 

E mi auguro di ottenere una trama densità per questo,

ho fatto la seguente,

plot (density(MyData$samp1), col="red") 
lines (density(MyData$samp2), col="green") 
lines (density(MyData$samp3), col="blue") 

Ma facendo questo non mi dà trame corrette, perché non tutte le curve campione rientrano nei limiti del grafico. Ho provato a cercare risposte, ma sinceramente non sono ancora in grado di farlo. Potete aiutarmi a sapere come posso impostare la mia scala per quanto sopra? O quale altro dovrei fare per il codice sopra, in modo che tutte le curve siano nel range ?? Ho molti campioni, quindi ho bisogno di qualcosa che possa anche assegnare automaticamente una curva di colore diversa per ciascun mio campione, dopo averlo ridimensionato correttamente.

Grazie in anticipo ..

+0

La risposta alla domanda può essere trovata nei commenti alla risposta accettata nel proposto duplicato. – Dason

risposta

6

è necessario modificare i limiti degli assi della trama originale per adattarsi tutto in questo non è fatto per voi automaticamente quando si aggiungono diverse linee:.

esempio

plot (density(MyData$samp1), col="red",ylim=c(0,3.5),xlim=c(-1,2)) 
lines (density(MyData$samp2), col="green") 
lines (density(MyData$samp3), col="blue") 

enter image description here

+0

Sì, grazie mille per il tuo aiuto. – Letin

2

Si potrebbe anche generare i limiti del X e Y automaticamente:

ranges <- apply(MyData, 2, 
      function(x) { dens <- density(x); c(range(dens$x), range(dens$y)) }) 

plot(density(MyData$samp1), col="red", 
     xlim = range(ranges[1:2, ]), ylim = range(ranges[3:4, ])) 
lines(density(MyData$samp2), col="green") 
lines(density(MyData$samp3), col="blue") 

densities

+0

Sì lavorerà su di esso .. grazie anche a te per il tuo aiuto .. :) – Letin

+2

Un approccio più automatico (dopo aver calcolato i tuoi intervalli) potrebbe essere qualcosa del tipo: 'trama (0, tipo =" n ", xlim = intervallo (range [1: 2,]), ylim = range (range [3: 4,])); COL = arcobaleno (ncol (MyData)); lapply (1: (ncol (MyData)), funzione (x) linee (densità (MyData [, x]), col = COL [x])) '. In altre parole, crea una trama vuota, quindi usa 'lapply' per tracciare' linee' su questo grafico vuoto. – A5C1D2H2I1M1N2O1R2T1

+0

+1 Buona idea, @mrdwab –

4

Usando il pacchetto lattice (Sono sicuro che un ggplot2 esempio non è molto indietro), è possibile utilizzare la funzione densityplot:

library(lattice) 
densityplot(~ samp1 + samp2 + samp3, data = myData, auto.key = TRUE) 

enter image description here

Oppure utilizzare il pacchetto reshape2 per ottenere i dati in una forma alta prima della stampa:

library(reshape2) 

myDataM<-melt(myData) 

densityplot(~ value, groups = variable, data = myDataM, auto.key = TRUE) 
+0

sì questo sarebbe buono, così che ho anche i colori automaticamente .. Grazie :) – Letin

Problemi correlati