繁体   English   中英

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

[英]How can I make a heatmap with a large matrix?

我有一个 1000*1000 的矩阵(它只包含整数 0 和 1),但是当我尝试制作热图时,由于它太大而发生错误。

如何使用如此大的矩阵创建热图?

我可以相信热图至少需要很长时间,因为heatmap做了很多需要额外时间和内存的花哨的东西。 使用dat从@ bill_080的例子:

## 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 question 中有关于 R 内存管理的建议。 如果您无法分配 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,1,0.5))

在此处输入图片说明

试试光栅包,它可以处理巨大的光栅文件。

使用heatmap3 ,它比默认的heatmap函数更高效,并且通过使用fastcluster包来进行分层聚类,这对我来说效果很好。 添加参数useRaster=TRUE也有帮助:

library(heatmap3)
nrowcol <- 1000
dat <- matrix(ifelse(runif(nrowcol*nrowcol) > 0.5, 1, 0), nrow=nrowcol)
heatmap3(dat,useRaster=TRUE)

在此处输入图片说明

useRaster=TRUE对于将内存使用保持在限制内似乎非常重要。 您可以在heatmap.2使用相同的参数。 计算层次聚类的距离矩阵是计算中的主要开销,但对于大型矩阵, heatmap3使用更高效的fastcluster包。 对于非常大的矩阵,尽管尝试进行基于距离的层次聚类,但您将不可避免地遇到麻烦。 在这种情况下,您仍然可以使用参数Rowv=NAColv=NA来抑制行和列树状图,并使用其他一些逻辑对行和列进行排序,例如

nrowcol <- 5000
dat <- matrix(ifelse(runif(nrowcol*nrowcol) > 0.5, 1, 0), nrow=nrowcol)
heatmap3(dat,useRaster=TRUE,Rowv=NA,Colv=NA)

在我的带有 8 Gb 内存的笔记本电脑上仍然可以正常运行,而在包含树状图的情况下,它已经开始崩溃了。

您还可以使用 gplots 包中的 heatmap.2 并简单地关闭树状图,因为它们通常占用最多的计算时间(根据我的经验)。

另外,您是否考虑过通过 pdf()、png() 或 jpeg() 将热图直接打印到文件中?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM