2010-09-24 11 views
24

Lo que me gustaría hacer es tomar esta matriz:mostrar una matriz, incluyendo los valores, como un mapa de calor

> partb 
       0.5 1.5 1a 1b -2 -3 
A1FCLYRBAB430F 0.26 0.00 0.74 0.00 0.00 0.00 
A1SO604B523Q68 0.67 0.33 0.00 0.00 0.00 0.00 
A386SQL39RBV7G 0.00 0.33 0.33 0.33 0.00 0.00 
A3GTXOXRSE74WD 0.41 0.00 0.08 0.03 0.05 0.44 
A3OOD9IMOHPPFQ 0.00 0.00 0.33 0.00 0.33 0.33 
A8AZ39QM2A9SO 0.13 0.54 0.18 0.13 0.00 0.03 

y luego hacer un mapa de calor que tiene cada uno de los valores de las celdas de color ahora.

Haciendo un mapa de calor es fácil:

> heatmap(partb, Rowv=NA, Colv=NA, col = heat.colors(256), margins=c(5,10)) 

Pero para la vida de mí no puedo encontrar la manera de poner el valor en cada una de las células.

¿Qué me estoy perdiendo? Seguramente esto es algo común.

Respuesta

11

Pruebe heatmap.2 del paquete gplots. Los parámetros cellnote y notecol controlan el texto colocado en las celdas. Probablemente también quieras dendrogram = "none".

+0

Esto funciona bien, pero el espacio es todo en mal estado. La parte superior izquierda de la imagen, donde estaba la clave, está en blanco. Alguna idea sobre cómo centrarlo: heatmap.2 (partb, Rowv = FALSE, Colv = FALSE, dendrogram = 'none', cellnote = partb, notecol = "black", trace = 'none', rowsep = c (1, 2,3,4,5,6), clave = FALSO) –

+1

Buen punto. La función heatmap.2 realmente usa la función de diseño y crea 4 trazas en la salida. Puede probar los parámetros 'lmat',' lwid', y 'lhei', o modificar la fuente de la función para hacer lo que necesita, pero no he llegado tan lejos con eso. –

+3

Esto era exactamente lo que necesitaba. Jugar con 'lwid' y' lhei' funcionó a la perfección. Establecer 'márgenes' me permitió asegurarme de que las etiquetas no estuvieran cortadas. Todo: 'heatmap.2 (partb, Rowv = FALSE, Colv = FALSE, dendrogram = 'none', cellnote = partb, notecol =" black ", trace = 'none', clave = FALSE, lwid = c (.01 , .99), lhei = c (.01, .99), márgenes = c (5,15)) ' –

3

levelplot() del paquete lattice le dará una leyenda de color. No es exactamente lo que quieres, sino algo en lo que pensar.

4

Puede usar image y text. Personalmente me gusta image.plot del paquete fields, porque agrega una leyenda en el lateral, pero puede usarlo también con image.

Así, por ejemplo

require(fields) 
# Make a 10x10 matrix 
m = matrix(rnorm(100), nrow=10) 
image.plot(m) 
for (x in 1:10) 
    for (y in 1:10) 
     text((x-1)/9, (y-1)/9, sprintf("%0.2f", m[x,y])) 
13

Por ejemplo:

m <- matrix(1:30, ncol=6) 
colnames(m) <- paste("C", 1:6, sep="") 
rownames(m) <- paste("R", 1:5, sep="") 
m 

image(1:ncol(m), 1:nrow(m), t(m), col = terrain.colors(60), axes = FALSE) 
axis(1, 1:ncol(m), colnames(m)) 
axis(2, 1:nrow(m), rownames(m)) 
for (x in 1:ncol(m)) 
    for (y in 1:nrow(m)) 
    text(x, y, m[y,x]) 
+0

¡Gracias! esta es la respuesta más simple, sin necesidad de ningún paquete adicional, sin ggplot2, corto y claro, desde mi punto de vista: perfecto –

Cuestiones relacionadas