2010-09-24 15 views
24

Quello che mi piacerebbe fare è prendere questa matrice:visualizzare una matrice, compresi i valori, come heatmap

> 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 

E poi fare una mappa termica che ha ciascuno dei valori nelle celle ora colorati.

Fare una mappa termica è facile:

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

Ma per la vita di me non riesco a capire come mettere il valore in ciascuna delle cellule.

Cosa mi manca? Sicuramente questa è una cosa comune.

risposta

11

Provare heatmap.2 dal pacchetto gplots. I parametri cellnote e notecol controllano il testo inserito nelle celle. Probabilmente vorrai anche dendrogram = "none".

+0

Questo funziona bene, ma la distanza è tutto incasinato. La parte in alto a sinistra dell'immagine, dove si trovava la chiave, è vuota. Qualche idea su come centrarla: heatmap.2 (partb, Rowv = FALSE, Colv = FALSE, dendrogram = 'none', cellnote = partb, notecol = "black", trace = 'none', rowsep = c (1, 2,3,4,5,6), chiave = FALSE) –

+1

Buon punto. La funzione heatmap.2 utilizza effettivamente la funzione di layout e crea 4 grafici in uscita. Puoi provare 'lmat', 'lwid', e' lhei', params, o modificare l'origine della funzione per fare ciò che ti serve, ma non mi sono mai spinto così lontano. –

+3

Questo era esattamente quello di cui avevo bisogno. Giocare con 'lwid' e' lhei' funzionava perfettamente. L'impostazione dei margini mi permetteva di assicurarmi che le etichette non venissero tagliate. Intero oggetto: 'heatmap.2 (partb, Rowv = FALSE, Colv = FALSE, dendrogram = 'none', cellnote = partb, notecol =" black ", trace = 'none', chiave = FALSE, lwid = c (.01 , .99), lhei = c (.01, .99), margini = c (5,15)) ' –

3

levelplot() dal pacchetto lattice ti darà una legenda di colore. Non esattamente quello che vuoi, ma qualcosa a cui pensare.

4

È possibile utilizzare image e text. Personalmente mi piace il image.plot dal pacchetto fields, perché aggiunge una legenda sul lato, ma puoi usarlo anche con image.

Così, per esempio

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

Ad esempio:

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

Grazie! questa è la risposta più semplice, non c'è bisogno di alcun pacchetto aggiuntivo, nessun ggplot2, breve e chiaro, dal mio punto di vista: perfetto –

Problemi correlati