2012-08-26 20 views
5

Mi objetivo es construir un diagrama de nivel (del paquete de celosía) con 4 o más trazados individuales que comparten el mismo colorkey. Si bien esto parece ser relativamente simple al usar funciones, no he podido encontrar una solución usando matrices de datos. Un ejemplo de un levelplot trabajar con una sola matriz:R: Múltiples tramas de nivel de retícula de matrices

d <- replicate(10,rnorm(10)) 
levelplot(d) 

he encontrado soluciones parciales utilizando impresión y dividir para mostrar los 4 levelplots en la misma pantalla, pero estos requeriría notificación para apagar la clave de color, o muéstralo en cada parcela. Ninguna de las soluciones es completamente satisfactoria.

Si utilizo la opción de diseño en levelplot, así:

levelplot(d, layout=c(2,2)) 

, me sale el diseño deseado, con una gran clave de color, principal y xlab/ylab, pero solo se imprimirá una levelplot.

He estado tratando de construir una fórmula que produzca el resultado deseado, pero me temo que mi comprensión de los marcos de datos, matrices y matrices no es lo suficientemente profunda como para hacerlo. Si alguien sabe de una solución de trabajo, estaría muy agradecido. Lo que imagino es algo a lo largo de la línea (código no funciona):

d1 <- replicate(10,rnorm(10)) 
d2 <- replicate(10,rnorm(10)) 
d3 <- replicate(10,rnorm(10)) 
d4 <- replicate(10,rnorm(10)) 

d <- list(d1,d2,d3,d4) 
di <- c(1,2,3,4) 

levelplot(x ~ y | di, data = d, layout=c(2,2)) 

NB! Evitar las matrices no es una opción. Algunos de ellos se obtienen de archivos de texto sin formato.

gracias de antemano,

-JP

+0

de bienvenida en el SO . No tengo tiempo para obtener una respuesta adecuada ahora, pero consulte [esta página] (http://learnr.wordpress.com/2009/07/20/ggplot2-version-of-figures-in-lattice -multivariate-data-visualisation-with-r-part-6 /), donde puedes encontrar algunos ejemplos de levelplots, tanto en 'Lattice' como en' ggplot2'. Espero que esto te lleve por el camino correcto. Ah, y recomiendo 'ggplot2'. – ROLO

+0

Gracias, me encontré con 'ggplot2', pero' enrejado' parecía más simple de usar, pero no puedo discutir con los resultados producidos por el ejemplo de @ Andy-Garcia. Veré el sitio web que sugirió. – ipoga

Respuesta

7

Usando ggplot y reshape junto con su lista d:

require(reshape) 
require(ggplot2) 

ggplot(melt(d), aes(x=X1, y=X2)) + 
    facet_wrap(~ L1, ncol=2) + 
    geom_tile(aes(fill=value)) + 
    coord_equal() 

cual da:

enter image description here

+1

Muchas gracias, esto funciona espléndidamente. – ipoga

Cuestiones relacionadas