Domanda

Quello che mi piacerebbe fare è prendere questa matrice:

> 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.

Che cosa mi manca? Sicuramente questa è una cosa comune.

È stato utile?

Soluzione

Prova heatmap.2 dal href="http://cran.r-project.org/web/packages/gplots/index.html" rel="noreferrer"> gplots pacchetto . I parametri cellnote e notecol controllano il testo inserito nelle cellule. Probabilmente si vorrà dendrogram = "none" pure.

Altri suggerimenti

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])

È possibile utilizzare image e text. Personalmente, come image.plot dal pacchetto fields, perché aggiunge una leggenda sul lato, ma è possibile utilizzarlo con image troppo.

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]))

levelplot() dal pacchetto lattice vi darà una legenda dei colori. Non è esattamente quello che si vuole, ma qualcosa a cui pensare.

A seguito lcgong (purtroppo posso pubblicare un commento diretta) la trasposizione pura portato a problemi con la rappresentazione dei colori. Di conseguenza, ho ruotato nuovamente la matrice ed ha funzionato. È possibile trovare la funzione come segue. Si prega di fare in modo che la scala di colori heatmap selezionato lavora con n compreso tra 3 e 11. Se lo si desidera, si può semplicemente selezionare un altro qui.

heatmap <- function(data, rowN, colN, xTitle = "", yTitle = "", numColors)
{
    # transpose and rotate matrix clockswise 90 degrees 
    dataAdjusted <- t(apply(data,2,rev))

    image(1:ncol(data), 1:nrow(data), xlab = xTitle, ylab = yTitle, dataAdjusted, col = rev(brewer.pal(numColors,"RdYlBu")), axes = FALSE)
    axis(1, 1:ncol(data), colN)
    axis(2, 1:nrow(data), rowN)

    for (x in 1:ncol(data))
        for (y in 1:nrow(data))
            # add text values into matrix based on transposed/rotated indices + round values to two digits
            text(x, y, round(dataAdjusted[x,y],2))
}

# required lib
library(RColorBrewer)

# Make a 8x8 matrix
m = matrix(rnorm(64), nrow=8)

# row names
rowN <- c("row 01", "row 02", "row 03", "row 04", "row 05", "row 06", "row 07", "row 08");
# column names
colN <- c("col 01", "col 02", "col 03", "col 04", "col 05", "col 06", "col 07", "col 08");

# without axis titles    
heatmap(m, rowN, colN, numColors = 10)

# alternatively with titles
heatmap(m, rowN, colN, xTitle = "xTest", yTitle = "yTest", numColors = 10)

C'è un altro modo più semplice per fare heatmaps con i valori. È possibile utilizzare pheatmap per fare questo.

dat <- matrix(rnorm(100, 3, 1), ncol=10)
names(dat) <- paste("X", 1:10)
install.packages('pheatmap') # if not installed already
library(pheatmap)
pheatmap(dat, display_numbers = T)

Questo vi darà una trama del genere

Heatmap con i valori

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top