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

R Pheatmap:在完整矩阵上进行分层聚类,但只显示行的子集,r,pheatmap,R,Pheatmap,我有一个基因表达数据集,想展示一些基因的热图。首先,我想基于所有基因进行层次聚类,创建树状图,然后在这些基因的子集上创建热图。在explicit中,热图的列数与已创建的树状图相同,但显示的行数较少。我曾尝试使用下面的代码,但pheatmap似乎根据简化矩阵对集群重新排序 # Random data full_mat <- matrix(rgamma(1000, shape = 1) * 5, ncol = 50) reduced_mat <- full_mat[1:5,] # F

我有一个基因表达数据集,想展示一些基因的热图。首先,我想基于所有基因进行层次聚类,创建树状图,然后在这些基因的子集上创建热图。在explicit中,热图的列数与已创建的树状图相同,但显示的行数较少。我曾尝试使用下面的代码,但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=fB,但根本没有进行密度图或重新排序。

尝试使用函数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")
dev.copy(jpeg,filename="plot.jpg")
dev.off ()
它仍将基于子集合数据集生成树状图,但不应改变所用矩阵的顺序。如果我理解正确,这就是你想要的

如果您提供一个可复制的示例,使用dput,我可以自己尝试

如果您打算这样做,您可以做的是创建热图,保持行和列的顺序,不创建第二个树状图,而是将热图保存为图像,这可以通过以下操作完成:

 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")
dev.copy(jpeg,filename="plot.jpg")
dev.off ()
对原始热图执行相同操作,裁剪出您感兴趣的树状图部分,并将其粘贴到photoshop或paint中,以创建第二张热图图像

然而,正如我在评论中提到的,这不是一个真正的子集数据集树状图,而是原始热图的一个片段


让我知道它是否有效

谢谢!还没有尝试,但根据您的描述,这将生成一个新的树状图。我想使用与在完整矩阵上生成的树状图相同的树状图。也就是说,聚类应该基于完整的矩阵,而热图函数只是绘制每个基因的表达。好的,我明白了。老实说,我不知道你的要求是否可行,因为这样你就不会根据提供的数据创建真正的树状图。只是通过编辑原始帖子来解决你的问题^