Подтвердить что ты не робот

Отображать матрицу, включая значения, в качестве тепловой карты

Что я хотел бы сделать, так это взять эту матрицу:

> 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

И затем сделайте тепловую карту, которая имеет каждое из значений в уже окрашенных ячейках.

Создание тепловой карты легко:

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

Но для жизни меня не могу понять, как поместить значение в каждую из ячеек.

Что мне не хватает? Конечно, это обычная вещь.

4b9b3361

Ответ 1

Попробуйте heatmap.2 из пакета gplots. Параметры cellnote и notecol управляют текстом, помещенным в ячейки. Вероятно, вам понадобится dendrogram = "none".

Ответ 2

Например:

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

Ответ 3

Вы можете использовать image и text. Мне лично нравится image.plot из пакета fields, потому что он добавляет легенду сбоку, но вы также можете использовать ее с image.

Итак, например

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

Ответ 4

levelplot() из пакета lattice предоставит вам легенду цвета. Не совсем то, что вы хотите, но что-то о чем подумать.

Ответ 5

Вслед за lcgong (к сожалению, я могу оставить прямой комментарий) чистое перемещение привело к проблемам с отображением цвета. Соответственно я снова повернул матрицу и все заработало. Вы можете найти функцию следующим образом. Убедитесь, что выбранная цветовая шкала тепловых карт работает с n от 3 до 11. При желании вы можете просто выбрать другую здесь.

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)

Ответ 6

Существует еще один более простой способ составления тепловых карт со значениями. Для этого вы можете использовать pheatmap.

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)

Это даст вам такой сюжет, как этот

Heatmap with values