如何使用大矩阵制作热图?

问题描述

| 我有一个1000 * 1000的矩阵(仅包含整数0和1),但是当我尝试制作热图时,会发生错误,因为它太大了。 如何使用如此大的矩阵创建热图?     

解决方法

我可以相信,热图至少需要花费很长时间,因为
heatmap
做很多花哨的东西,这会花费更多的时间和内存。在@ bill_080 \的示例中使用
dat
## basic command: 66 seconds
t0 <- system.time(heatmap(dat))
## don\'t reorder rows & columns: 43 seconds
t1 <- system.time(heatmap(dat,Rowv=NA))
## remove most fancy stuff (from ?heatmap): 14 seconds
t2 <- system.time( heatmap(dat,Rowv = NA,Colv = NA,scale=\"column\",main = \"heatmap(*,NA,NA) ~= image(t(x))\"))
## image only: 13 seconds
t3  <- system.time(image(dat))
## image using raster capability in R 2.13.0: 1.2 seconds
t4 <- system.time(image(dat,useRaster=TRUE))
您可能要考虑热图中真正想要的东西-即是否需要精美的树状图/重新排序的东西?     ,在有关SO内存管理的SO问题中有一些建议。如果您无法分配1000 x 1000的图片,那么您可能应该停止尝试在手机上进行统计。     ,尝试时没有错误。这是代码:
 library(lattice)

 #Build the data
 nrowcol <- 1000
 dat <- matrix(ifelse(runif(nrowcol*nrowcol) > 0.5,1,0),nrow=nrowcol)

 #Build the palette and plot it
 pal <- colorRampPalette(c(\"red\",\"yellow\"),space = \"rgb\")
 levelplot(dat,main=\"1000 X 1000 Levelplot\",xlab=\"\",ylab=\"\",col.regions=pal(4),cuts=3,at=seq(0,0.5))
    ,尝试使用光栅包,它可以处理巨大的光栅文件。     ,为了我
library(heatmap3)
nrowcol <- 1000
dat <- matrix(ifelse(runif(nrowcol*nrowcol) > 0.5,nrow=nrowcol)
heatmap3(dat,useRaster=TRUE)
工作正常。 ѭ5似乎对保持内存使用在限制范围内非常重要。您可以在
heatmap.2
中使用相同的参数。计算分层聚类的距离矩阵是计算的主要开销,但是对于大型矩阵,
heatmap3
使用更高效的
fastcluster
包。对于非常大的矩阵,尽管尝试进行基于距离的层次聚类,但不可避免地会遇到麻烦。在这种情况下,您仍然可以使用参数
Rowv=NA
Colv=NA
抑制行和列树状图,并使用其他逻辑对行和列进行排序,例如
nrowcol <- 5000
dat <- matrix(ifelse(runif(nrowcol*nrowcol) > 0.5,useRaster=TRUE,Rowv=NA,Colv=NA)
在配备8 Gb内存的笔记本电脑上,仍然可以正常运行,而有了树状图,它已经开始崩溃。     ,您也可以从gplots包中使用heatmap.2并仅关闭树状图,因为这些树状图通常占用最多的计算时间(根据我的经验)。 另外,您是否考虑过通过pdf(),png()或jpeg()将热图直接打印到文件中?