Ce que j'aimerais faire, c'est 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 faites une carte thermique qui a chacune des valeurs dans les cellules maintenant colorées.
Faire une carte thermique 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 rate? C'est sûrement une chose courante.
Essayez heatmap.2
du package gplots
. Les paramètres cellnote et notecol contrôlent le texte placé dans les cellules. Vous voudrez probablement dendrogram = "none"
ainsi que.
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, j'aime image.plot
du package fields
, car il ajoute une légende sur le côté, mais vous pouvez également l'utiliser avec image
.
Donc 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 de couleur. Pas exactement ce que vous voulez mais quelque chose à penser.
Il existe un autre moyen plus simple de créer des heatmaps avec des valeurs. Vous pouvez utiliser pheatmap pour ce 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 complot comme celui-ci
Après lcgong (malheureusement je peux poster un commentaire direct) la transposition pure a conduit à des problèmes de représentation des couleurs. En conséquence, j'ai de nouveau tourné la matrice et cela a fonctionné. Vous pouvez trouver la fonction comme suit. Veuillez vous assurer que l'échelle de couleurs de la carte thermique sélectionnée fonctionne avec n entre 3 et 11. Si vous le souhaitez, vous pouvez simplement en sélectionner une 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)