如何制作带有大矩阵的热图?

     2023-02-18     171

关键词:

【中文标题】如何制作带有大矩阵的热图?【英文标题】:How can I make a heatmap with a large matrix? 【发布时间】:2011-08-05 17:50:54 【问题描述】:

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

如何创建具有如此大矩阵的热图?

【问题讨论】:

关于热图的大量答案。 ***.com/questions/3789549/…***.com/questions/5035491/…尝试搜索[r] heatmap 请复制并粘贴确切的错误。 1000x1000 不应该产生对 R 来说太大的距离矩阵。 @Roman 但这两个问题都不是…… 在对行和列进行任何重新排序后尝试image(m) 发布了一个使用heatmap3的解决方案,它更节省内存,尤其是通过它使用fastcluster包进行层次聚类;添加参数 useRaster=TRUE 也有帮助 【参考方案1】:

使用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 包来处理大型矩阵。 With very large matrices you will unavoidably get into trouble though trying to do a distance-based hierarchical cluster. 在这种情况下,您仍然可以使用参数 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 内存的笔记本电脑上仍然可以正常运行,而包含树状图的情况下它已经开始崩溃了。

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我可以相信热图至少需要很长时间,因为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))

您可能需要考虑您真正想要从热图中得到什么——即,您是否需要花哨的树状图/重新排序的东西?

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

我尝试时没有错误。代码如下:

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

【讨论】:

我能够达到大约 2300X2300 的绘图。 2400X2400 绘图在 levelplot() 语句中给出“使用数据包 1 时出错,无法分配大小为 22.0 Mb 的向量”。 对我来说,这只适用于带有选项 useRaster=TRUE 的较大矩阵,即 levelplot(dat, main="1000 X 1000 Levelplot", xlab="", ylab="", col.regions=朋友(4),切= 3,在=序列(0,1,0.5),用户栅格=真);否则即使使用 5000 x 5000 矩阵,它最终也会分配大约 6 Gb 的内存 - 不好!! 另外,这是一个水平图,而不是包含行和/或列层次聚类的热图,这有很大的不同......【参考方案6】:

this SO question 中有关于 R 内存管理的建议。如果您无法分配 1000 x 1000 的图像,那么您可能应该停止尝试在手机上进行统计。

【讨论】:

我可以为我的 palmpilot 反向移植 R 吗? 主要开销不是绘制图像,而是进行层次聚类分析,因为这需要计算成对距离矩阵,众所周知,这很难扩展到更大的问题......甚至仅绘制图像内存使用率异常高 - 5000 x 5000 矩阵的级别图使用 6 Gb 内存;这可以通过在 heatmap.2 或 heatmap3 中使用参数 useRaster=TRUE 来解决....不知道那里的标准热图函数发生了什么...

R:如何使用 ggplot2 创建一个半色半数的热图?

】R:如何使用ggplot2创建一个半色半数的热图?【英文标题】:R:howtocreateaheatmapwithhalfcoloursandhalfnumbersusingggplot2?【发布时间】:2021-12-2716:56:55【问题描述】:我正在尝试创建一个由热图表示的相关矩阵,其中一半的热图使用颜色... 查看详情

如何创建带有热图的世界地图

】如何创建带有热图的世界地图【英文标题】:HowdoIcreateaworldmapwithaheatmapontopofit【发布时间】:2022-01-1322:29:26【问题描述】:我一直在尝试在R中创建一个世界地图,上面覆盖了一个热图。我有一个名为mydata的数据框,其中有2列... 查看详情

python中的热图 - 带有颜色

...colors【发布时间】:2018-01-2316:19:00【问题描述】:我尝试制作一个程序,用于根据参与者的点击绘制热图。有增加和减少情绪的两个身体。我想用蓝色(更强烈的蓝色=更多的点击次数)和红色的右体显示点击强度。问题是我需... 查看详情

带有geom_tile的热图如何在不使用构面的情况下根据另一个因素进行划分和重新排序

】带有geom_tile的热图如何在不使用构面的情况下根据另一个因素进行划分和重新排序【英文标题】:Heatmapwithgeom_tilehowtodivideandreorderbasedonanotherfactorwithoutusingfacets【发布时间】:2021-12-0303:03:30【问题描述】:我有100个样本,我用9... 查看详情

如何缩放热图的单元格高度和宽度?(代码片段)

...,左上角的单元格包含“Volvo142E”行和“mpg”列的信息。如何调整热图,使方向与输入矩阵中的方向完全相同。在左上角的含义中,单元格包含“MazdaRX4”行和“mpg”列的信息。答案同时我找到了解决问题的方法。我切换到了heat... 查看详情

python如何根据存储在python列表中的数据制作热图(代码片段)

查看详情

从 pandas DataFrame 制作热图

...【问题描述】:我有一个从Python的Pandas包生成的数据框。如何使用pandas包中的DataFrame生成热图。importnumpyasnpfrompandasimport*Index=[\'aaa\',\'bbb\',\'ccc\',\'ddd\',\'ee 查看详情

使用 ggplot2 将显着性级别添加到矩阵相关热图

...ot2【发布时间】:2012-08-2504:11:03【问题描述】:我想知道如何在矩阵相关热图中添加另一层重要且需要的复杂性,例如除了R2值(-1到1)之外的显着性水平星的方式之后的p值?在这个问题中,不打算将显着性水平星号或p值作为... 查看详情

如何根据 GradientBoost 结果绘制热图?

】如何根据GradientBoost结果绘制热图?【英文标题】:HowtoplotheatmapbasedonGradientBoostresults?【发布时间】:2019-08-1811:25:41【问题描述】:我想根据y_predict和y_train的结果打印混淆矩阵的热图。我有点卡住了,我已经查看了热图的pandas... 查看详情

绘制聚类热图(带树状图)/Python

...建一个聚集的热图(带有树状图)。他们在他们的网站上制作的那个不能很好地扩展,我已经找到了各种解决方案,但其中大多数都是用R或JavaScript编写的。我正在尝试仅从热图的左侧创建一个带有 查看详情

R上的绘图问题(使用热图)

...想使用矩阵的行名和列名进行x&y标记。但是我不知道如何以一种好的方式来表示它们。顺便说一下,矩阵是1284x1284..【 查看详情

比较两个不同大小的矩阵以制作一个大矩阵 - 速度改进?

】比较两个不同大小的矩阵以制作一个大矩阵-速度改进?【英文标题】:Comparetwodifferentsizematricestomakeonelargematrix-SpeedImprovements?【发布时间】:2016-10-0318:28:44【问题描述】:我有两个矩阵,我需要用它们来创建一个更大的矩阵。... 查看详情

2 树状图 + 来自 scipy 的压缩相关矩阵的热图

】2树状图+来自scipy的压缩相关矩阵的热图【英文标题】:2Dendrograms+Heatmapfromcondensedcorrelationmatrixwithscipy【发布时间】:2019-03-0205:09:02【问题描述】:我尝试创建这样的东西:plottingresultsofhierarchicalclusteringontopofamatrixofdatainpython不... 查看详情

如何为 seaborn 的热图或相关矩阵设置动画?

】如何为seaborn的热图或相关矩阵设置动画?【英文标题】:Howtoanimateaseaborn\'sheatmaporcorrelationmatrix?【发布时间】:2016-02-1723:48:37【问题描述】:我对python比较陌生(来自Matlab)。作为一个项目,我试图随着时间的推移创建相关矩... 查看详情

将包含值的矩阵显示为热图

】将包含值的矩阵显示为热图【英文标题】:displayamatrix,includingthevalues,asaheatmap【发布时间】:2011-04-1621:58:28【问题描述】:我想做的是采用这个矩阵:>partb0.51.51a1b-2-3A1FCLYRBAB430F0.260.000.740.000.000.00A1SO604B523Q680.670.330.000.000.000.00A... 查看详情

如何反转seaborn热图颜色条的颜色

】如何反转seaborn热图颜色条的颜色【英文标题】:Howtoinvertcolorofseabornheatmapcolorbar【发布时间】:2018-05-0718:34:48【问题描述】:我使用热图来可视化混淆矩阵。我喜欢标准颜色,但我希望浅橙色为0,深紫色为最高值。我设法只使... 查看详情

具有匹配列的多个数据集的相关矩阵热图

】具有匹配列的多个数据集的相关矩阵热图【英文标题】:Correlationmatrixheatmapwithmultipledatasetsthathavematchingcolumns【发布时间】:2017-04-2212:58:28【问题描述】:如果我们有三个数据集:X=pd.DataFrame("t":[1,2,3,4,5],"A":[34,12,78,84,26],"B":[54,87... 查看详情

带有多种配色方案的带注释热图

】带有多种配色方案的带注释热图【英文标题】:Annotatedheatmapwithmultiplecolorschemes【发布时间】:2019-06-2104:20:11【问题描述】:我有以下数据框,并希望在热图中使用不同的配色方案来区分每个“步骤”中的小数差异。样本数据... 查看详情