我想做的是采用这个矩阵:
> 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))
但是对于我的生活,我无法弄清楚如何将价值放在每个细胞中。
我错过了什么?当然这是常见的事情。
答案 0 :(得分:16)
例如:
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])
答案 1 :(得分:13)
从gplots
包中试用heatmap.2
。 cellnote和notecol参数控制放置在单元格中的文本。你可能也想要dendrogram = "none"
。
答案 2 :(得分:4)
您可以使用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]))
答案 3 :(得分:3)
levelplot()
包的 lattice
将为您提供颜色图例。不完全是你想要的,但要考虑的事情。
答案 4 :(得分:0)
在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)
答案 5 :(得分:0)
还有另一种更简单的方法来使用值制作热图。您可以使用documentation来执行此操作。
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)
这会给你这样的情节