Pheatmap:在完整矩阵上进行分层聚类,但仅显示行的子集

时间:2019-02-20 15:07:21

标签: r pheatmap

我有一个基因表达数据集,想显示一些个基因的热图。首先,我想基于所有基因进行层次聚类,创建树状图,然后在这些基因的子集上创建热图。明确地说,热图的列与已创建的树状图相同,但显示的行较少。我尝试使用下面的代码,但是pheatmap似乎根据简化后的矩阵对聚类进行重新排序。

# Random data

full_mat <- matrix(rgamma(1000, shape = 1) * 5, ncol = 50)
reduced_mat <- full_mat[1:5,]

# Function to calculate distances on full-matrix and make dendrogram
cl_cb <- function(hcl, mat){
    # Recalculate manhattan distances for reorder method
    dists <- dist(full_mat, method = "manhattan")

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

# Only display the reduced matrix (same columns but fewer rows)
p <- pheatmap(reduced_mat, 
         show_rownames=TRUE, 
         show_colnames = TRUE,
         cluster_cols=T,
         cluster_rows=F,
         scale = "none",
         clustering_callback = cl_cb
         )

我尝试设置cluster_cols = F,但是根本没有进行树状图或重新排序。

1 个答案:

答案 0 :(得分:1)

尝试改用功能heatmap.2。如果还没有安装,请安装它。

之后,运行以下命令:

 heatmap.2(reduced_mat, dendrogram = "both", labRow=row.names(reduced_mat), 
                        labCol=colnames(reduced_mat), Colv = FALSE, Rowv = FALSE)

#If you want to only show row or col dendrogram, change dendrogram = "both" to dendrogram = "column" (or "row")

它仍然会基于子集数据集生成树状图,但是,它不应更改所使用矩阵的顺序。如果我理解正确,这就是您想要的。

如果您使用dput()提供了可复制的示例,我可以自己尝试一下。

如果设置了此功能,也许您可​​以做的是创建热图,保持行和列的顺序,不创建第二个树状图,而是将热图另存为图像,这可以完成以下操作:

dev.copy(jpeg,filename="plot.jpg")
dev.off ()

对原始热图执行相同的操作,裁剪出所需树状图的一部分,然后将其粘贴到photoshop或绘制到创建的第二个热图图像中。

但是,正如我在评论中提到的那样,这不是子集数据集的“真实”树状图,而是原始热图的“摘要”。

让我知道它是否有效!