Question

Ce que je voudrais faire est de prendre cette 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

Et puis faire un heatmap qui a chacune des valeurs dans les cellules maintenant colorées.

Faire heatmap est facile:

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

Mais pour la vie de moi je ne peux pas comprendre comment mettre la valeur dans chacune des cellules.

Qu'est-ce que je manque? Assurément, c'est une chose commune.

Était-ce utile?

La solution

Essayez heatmap.2 du package gplots. Les paramètres de cellnote et notecol contrôlent le texte placé dans les cellules. Vous aurez probablement envie dendrogram = "none" aussi bien.

Autres conseils

Par exemple:

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

Vous pouvez utiliser image et text. Personnellement, je aime image.plot du paquet fields, car il ajoute une légende sur le côté, mais vous pouvez l'utiliser avec image aussi.

Ainsi, par exemple

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() du paquet lattice vous donnera une légende des couleurs. Pas exactement ce que vous voulez, mais quelque chose à penser.

Après lcgong (malheureusement je peux poster un commentaire direct) la simple transposition conduit à des problèmes avec la représentation des couleurs. Par conséquent, je nouveau mis en rotation la matrice et cela a fonctionné. Vous pouvez trouver la fonction comme suit. S'il vous plaît assurez-vous que l'échelle de couleur heatmap sélectionné fonctionne avec n compris entre 3 et 11. Si vous le souhaitez, vous pouvez simplement sélectionner un autre ici.

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)

Il y a une autre façon plus simple de faire heatmaps avec des valeurs. Vous pouvez utiliser pheatmap pour le faire.

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)

Cela vous donnera un terrain comme celui-ci

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top