2012-09-17 15 views
8

Duplicar posible:
How to overlay density plots in R?¿Cómo obtener múltiples líneas en una sola gráfica de densidad, con una escala corregida?

recientemente he empezado a trabajar con conjuntos de datos de microarrays y estoy tratando de conseguir mis manos en R. Deseo hacer algunas parcelas de mis datos de los resultados, pero sin embargo estoy atrapado en lo siguiente.

tengo los siguientes datos (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 

Y deseo de obtener una gráfica de densidad para esto,

hice lo siguiente,

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

Pero hacer esto no me da las representaciones correctas, porque no todas las curvas de muestra se ajustan dentro de los límites de la trama. Intenté buscar respuestas, pero sinceramente aún no puedo resolver esto. ¿Puede ayudarme a saber cómo configuro mi báscula para lo anterior? ¿O qué más debería hacer con el código anterior, para que todas las curvas estén en rango? Tengo muchas muestras, por lo que necesito algo que también pueda asignar automáticamente una curva de color diferente para cada muestra, después de escalarla correctamente.

Gracias de antemano ..

+0

La respuesta a la pregunta se puede encontrar en los comentarios a la respuesta aceptada en el duplicado propuesto – Dason

Respuesta

6

tendrá que cambiar los límites del eje de la trama original de poner todo en Esto no se hace de forma automática cuando la adición de diferentes líneas:.

por ejemplo,

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í, muchas gracias por su ayuda. – Letin

2

También podría generar los límites de los ejes X y el eje Y de forma automática:

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í trabajará en ello ... gracias a usted también por su ayuda ... :) – Letin

+2

Un enfoque más automatizado (después de calcular sus rangos) podría ser algo así como: 'plot (0, type =" n ", xlim = range (rangos [1: 2,]), ylim = rango (rangos [3: 4,])); COL = arco iris (ncol (MyData)); lapply (1: (ncol (MyData)), función (x) líneas (densidad (MyData [, x]), col = COL [x])) '. En otras palabras, crea un gráfico vacío, luego usa 'lapply' para trazar' 'líneas' en este diagrama vacío. – A5C1D2H2I1M1N2O1R2T1

+0

+1 Buena idea, @mrdwab –

4

Usando el paquete lattice (estoy seguro de que una ggplot2 ejemplo no está muy lejos), puede usar la función densityplot:

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

enter image description here

o utilizar el paquete reshape2 para obtener sus datos en un formulario de altura antes de trazar:

library(reshape2) 

myDataM<-melt(myData) 

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

Sí, esto sería bueno, así que también tengo los colores automáticamente ... Gracias :) – Letin

Cuestiones relacionadas