0

我有一个基因表达数据集,想显示一些基因的热图。首先,我想基于所有基因进行层次聚类,并创建一个树状图,然后在这些基因的一个子集上创建一个热图。明确地说,热图将具有与已创建的树状图相同的列,但显示的行更少。我曾尝试使用下面的代码,但似乎 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,但根本没有进行任何树状图或重新排序。

4

1 回答 1

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 中或绘制到创建的第二个热图图像上。

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

让我知道它是否有效!

于 2019-02-20T17:04:44.093 回答