2010-09-24 4 views
24

Was ich möchte, ist zu tun, um diese Matrix zu nehmen:eine Matrix angezeigt werden, einschließlich der Werte, als 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 

Und dann eine Heatmap machen, dass jeder der Werte in den nun farbigen Zellen hat.

eine Heatmap durchzuführen ist einfach:

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

Aber für das Leben von mir kann ich nicht herausfinden, wie der Wert in jeder der Zellen zu setzen.

Was fehlt mir? Sicher ist das eine gemeinsame Sache.

Antwort

11

Versuchen Sie heatmap.2 aus dem gplots Paket. Die Parameter cellnote und notecol steuern den in Zellen platzierten Text. Sie werden wahrscheinlich auch dendrogram = "none" wollen.

+0

Das funktioniert gut, aber der Abstand ist alles durcheinander. Oben links im Bild, wo der Schlüssel war, ist nur leer. Irgendwelche Ideen, wie man es zentriert: heatmap.2 (partb, Rowv = FALSE, Colv = FALSCH, dendrogram = 'none', cellnote = partb, notecol = "schwarz", trace = 'none', rowsep = c (1, 2,3,4,5,6), Schlüssel = FALSE) –

+1

Guter Punkt. Die heatmap.2-Funktion verwendet die Layout-Funktion und erstellt 4 Grafiken für die Ausgabe. Du kannst die Parameter 'lmat', 'lwid 'und' lhei' ausprobieren, oder die Quelle der Funktion modifizieren, um das zu tun, was du brauchst, aber ich bin noch nicht so weit gegangen. –

+3

Das war genau das, was ich brauchte. Mit "lwid" und "lhei" zu arbeiten, hat perfekt funktioniert. Durch das Setzen von "Margen" konnte ich sicherstellen, dass die Etiketten nicht abgeschnitten wurden. Ganze Sache: 'heatmap.2 (partb, Rowv = FALSE, Colv = FALSCH, dendrogram = 'none', cellnote = partb, notecol =" schwarz ", trace = 'none', key = FALSCH, lwid = c (.01 , .99), lhei = c (.01, .99), Ränder = c (5,15)) ' –

3

levelplot() aus dem lattice Paket erhalten Sie eine Farblegende. Nicht genau was du willst, aber etwas zum Nachdenken.

4

Sie können image und text verwenden. Ich persönlich mag image.plot aus dem fields Paket, weil es eine Legende auf der Seite hinzufügt, aber Sie können es mit image auch verwenden.

So zum Beispiel

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

Zum Beispiel:

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

Vielen Dank! Dies ist die einfachste Antwort, keine Notwendigkeit für ein zusätzliches Paket, keine ggplot2, kurz und klar, aus meiner Sicht: perfekt –

Verwandte Themen