2011-12-04 25 views
6

Estoy usando R para crear un mapa de calor de una matriz usando heatmap.2 - y quiero agrupar estas imágenes en una imagen grande - Lo que suelo usar para lograr esto es layout() - pero esto no funciona, ya que heatmap.2 usa el diseño, y aparentemente el diseño no funciona recursivamente.diseño dentro del diseño en R

¿Alguien tiene alguna sugerencia sobre cómo agrupar 2 imágenes sin diseño, o cómo hacer que el diseño soporte las llamadas recursivas?

mat = matrix(nrow=3,nrow=3,1:9) 
layout(matrix(nrow=2,ncol=1)) 
heatmap.2(mat) ## overrides the layout and produces only one plot that takes whole screen 
heatmap.2(mat) ## still only one image 

gracias.

Respuesta

6

Lo que sigue es un truco que casi con certeza no es una solución perfecta, pero puede ayudarlo a comenzar.

Crea tu propia versión de la función heatmap.2 llamada hm3. En el código de hm3, comente todas las líneas entre:

if (missing(lhei) || is.null(lhei)) 

y la llamada layout:

layout(lmat, widths = lwid, heights = lhei, respect = FALSE) 

que es un gran trozo de código, quizás 30 líneas. Ahora el siguiente código produce dos mapas de calor con dendrogramas y claves de lado a lado:

x <- as.matrix(mtcars) 
lhei <- c(1.5, 4,1.5,4) 
lwid <- c(1.5, 4,1.5,4) 
layout(rbind(c(4,3,8,7),c(2,1,6,5)), 
    widths = lwid, heights = lhei, respect = FALSE) 
hm3(x) 
hm3(x) 

enter image description here

Claramente, esto requerirá ajustes considerables para que se vea bonito (y un área de representación más grande, he aplastado todo para que sea un tamaño razonable para publicar aquí).

Esto no se ha probado por completo. Es probable que el uso de cualquiera de las opciones en la función hm3 que controlan la apariencia de la trama causará que las cosas se vuelvan un poco desconcertantes. Pero este puede ser un buen punto de partida para su propia experimentación para abordar esos problemas.

+0

Gracias - Lástima que no hay una manera más fácil de hacer esto ... Dejaré la pregunta abierta un poco más en caso de que alguien conozca una solución más genérica, pero parece que la vida es dura y su solución es el mejor, (aunque probablemente solo solucione mi problema en lugar de jugar con el código del mapa de calor que no suena divertido). – dan12345

1

¿Qué piensas hacer con los resultados?

Si solo desea comparar 2 mapas de calor uno al lado del otro en la pantalla, en lugar de combinarlos en un solo diagrama, puede abrir 2 dispositivos de trazado y colocarlos uno al lado del otro para compararlos (mucho más simple que crear un solo gráfico) :

heatmap.2(mat1) 
dev.new() 
heatmap.2(mat2) 

Ahora arrastre uno a un lado del otro con el mouse.

Si desea incluir el gráfico combinado en una publicación, puede ser más fácil crear los 2 gráficos y simplemente configurarlos uno al lado del otro en cualquier programa que esté utilizando para crear el artículo. Si los necesita en un archivo, puede guardar los 2 mapas de calor (u otras parcelas) como 2 archivos y luego usar herramientas como imagemagick, gimp o inkscape para combinar los 2 archivos en 1 con los gráficos uno al lado del otro.

Cuestiones relacionadas