3

我正在绘制一组 15 个样本,这些样本聚集在 A、B、C 三个组中,热图对它们进行排序,例如 C、A、B。(我读过这是因为它在右侧绘制了最强的集群相似)。我想订购集群,以便集群的叶子被视为 A、B、C (因此重新组织集群分支的顺序。有没有可以帮助我做到这一点的功能?

我使用的代码:

library(pheatmap)

pheatmap(mat, annotation_col = anno, 
    color = colorRampPalette(c("blue", "white", "red"))(50), show_rownames = F)

下面代码的图像输出

(cluster_cols=FALSE 根本不会对样本进行聚类,但这不是我想要的)

我也在另一个论坛上找到了这个,但我不确定如何更改功能代码以及它是否对我有用:

clustering_callback 回调函数来修改集群。使用两个参数调用:原始 hclust 对象和用于聚类的矩阵。必须返回一个 hclust 对象。

4

3 回答 3

1

嗨,我不确定这是否对您有任何帮助,但是当您检查?pheatmap并向下滚动到示例时,最后一段代码实际上确实给出了该示例。

# Modify ordering of the clusters using clustering callback option
callback = function(hc, mat){
    sv = svd(t(mat))$v[,1]
    dend = reorder(as.dendrogram(hc), wts = sv)
    as.hclust(dend)
}

pheatmap(test, clustering_callback = callback)

我在热图上进行了尝试,之前定义的函数实际上按照我需要的方式对集群进行了排序。虽然我不得不承认(因为我是 R 新手)我并不完全理解定义的callback函数的作用。

也许你也可以用dendsort编写一个函数,因为我知道你可以用它重新排序树状图的分​​支。

于 2020-01-24T18:11:31.197 回答
1
# install.packages("dendsort")
library(dendsort)

sort_hclust <- function(...) as.hclust(dendsort(as.dendrogram(...)))

cluster_cols=sort_hclust(hclust(dist(mat)))
于 2020-03-27T16:16:04.060 回答
0

在这种情况下,幸运的是列的聚类与样本编号顺序一致(类似于树状图),因此我添加了cluster_cols = FALSE并解决了重新聚类列的问题(并避免编写回调函数。

pheatmap(mat, 
         annotation_col = anno, 
         fontsize_row = 2, 
         show_rownames = T, 
         cutree_rows = 3, 
         cluster_cols = FALSE)
于 2020-04-08T07:50:38.233 回答