Pheatmap:重新排序树状图中的叶子

时间:2019-02-19 09:07:16

标签: r pheatmap

我已经使用 pheatmap 包基于分层聚类创建了带有对应的树状图的热图。现在,我想更改树状图中的叶子顺序。最好使用最优叶方法。我四处搜寻,但未找到任何解决方法来改变这一点。

对于使用最佳叶子方法如何更改叶子顺序的建议,我将不胜感激。

这是我的带有随机数据的示例代码:

mat <- matrix(rgamma(1000, shape = 1) * 5, ncol = 50)
p <- pheatmap(mat, 
         clustering_distance_cols = "manhattan",
         cluster_cols=TRUE,
         cluster_rows=FALSE
         )

1 个答案:

答案 0 :(得分:1)

对于“最佳叶子排序”,可以使用order库中的seriation方法。 pheatmap接受clustering_callback参数。根据文档:

  

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

因此,您需要构造一个回调函数,该函数接受hclust对象和初始矩阵并返回经过优化的hclust对象。

这是一个代码:

library(pheatmap)
library(seriation)

cl_cb <- function(hcl, mat){
    # Recalculate manhattan distances for reorder method
    dists <- dist(mat, method = "manhattan")

    # Perform reordering according to OLO method
    hclust_olo <- reorder(hcl, dists)
    return(hclust_olo)
}

mat <- matrix(rgamma(1000, shape = 1) * 5, ncol = 50)
p <- pheatmap(mat, 
         clustering_distance_cols = "manhattan",
         cluster_cols=TRUE,
         cluster_rows=FALSE,
         clustering_callback = cl_cb
         )