在给定树状图和 R 中的距离矩阵的情况下绘制热图

机器算法验证 r 数据可视化 聚类
2022-04-03 07:37:35

我有树状图和距离矩阵。我希望计算一个热图——无需重新进行距离矩阵和聚类。

R中是否有允许这样做的函数?

3个回答

我不知道具体的功能。我使用的通常采用原始数据或距离矩阵。然而,破解已经存在的代码并不是很困难,不了解基本的 R。例如查看mixOmicscim()包中函数的源代码(我选择这个是因为源代码很容易阅读;你将在Bioconductor项目中找到其他功能)。代码中有趣的部分是 l。92-113,他们将 HC 的结果分配给和 l 附近。193-246 他们设计了绘图区域(当他们调用时,您应该输入距离矩阵的值代替 mat )。高温高压ddcimage()

编辑

最近对相关主题的 Google 搜索将我引向dendrogramGrob()latticeExtra包。假设您已经有了排序的树状图对象,您可以从在线帮助中跳过示例代码的第一行并获得类似这样的内容(这里,使用mtcars数据集):

在此处输入图像描述

假设你也有原始数据,你可以使用函数 heatmap()。如果您想避免计算距离并再次对对象进行聚类,它可以将一两个树状图作为输入。

我们先模拟一些数据:

set.seed(1)
dat<-matrix(ncol=4, nrow=10, data=rnorm(40))

然后对行和列进行聚类:

rd<-dist(dat)
rc<-hclust(rd)
cd<-dist(t(dat))
cc<-hclust(cd)

在这之后我们有

1) 原始数据 (dat) 2) 原始数据矩阵行的距离矩阵 (rd) 和树状图 (rc) 3) 原始数据列的距离矩阵 (cd) 和树状图 (cc)

进一步的步骤实际上不需要距离矩阵,而是执行聚类的原始数据和生成的树状图。

使用原始数据,这些树状图可以用作函数 heatmap() 的输入。如果需要行和列树形图,请使用:

heatmap(dat, Rowv=as.dendrogram(rc), Colv=as.dendrogram(cc))

如果只需要行或列树状图,则使用 NA 作为 heatmap() 中 Rowv 或 Colv 参数的输入:

# Dendrogram for rows only
heatmap(dat, Rowv=as.dendrogram(rc), Colv=NA)
# Dendrogram for columns only
heatmap(dat, Rowv=NA, Colv=as.dendrogram(cc))

您可以尝试查看 maptree 或 ape 包。你想做什么?