在R中绘制作弊图时如何重新排序簇叶(列)?

时间:2019-07-03 11:44:34

标签: r pheatmap

我正在绘制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)

Image output from code below

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

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

  

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

3 个答案:

答案 0 :(得分: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 package编写函数,因为我知道您可以使用它对树状图的分​​支进行重新排序。

答案 1 :(得分:1)

# install.packages("dendsort")
library(dendsort)

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

cluster_cols=sort_hclust(hclust(dist(mat)))

答案 2 :(得分:0)

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

pheatmap(mat, 
         annotation_col = anno, 
         fontsize_row = 2, 
         show_rownames = T, 
         cutree_rows = 3, 
         cluster_cols = FALSE)