我有一个基因表达数据集,想显示一些个基因的热图。首先,我想基于所有基因进行层次聚类,创建树状图,然后在这些基因的子集上创建热图。明确地说,热图的列与已创建的树状图相同,但显示的行较少。我尝试使用下面的代码,但是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
,但是根本没有进行树状图或重新排序。
答案 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或绘制到创建的第二个热图图像中。
但是,正如我在评论中提到的那样,这不是子集数据集的“真实”树状图,而是原始热图的“摘要”。
让我知道它是否有效!