在 R 中绘制 pheatmap 时如何重新排序簇叶(列)?
How to reorder cluster leaves (columns) when plotting pheatmap in R?
我正在绘制一组 15 个样本,分为 A、B、C 三组,热图将它们排序为 C、A、B。(我读过这是因为它绘制在右侧具有最强相似性的簇)。我想对簇进行排序,以便簇的叶子被视为 A、B、C(因此重新组织簇分支的顺序。是否有函数可以帮助我做到这一点?
我用过的代码:
library(pheatmap)
pheatmap(mat, annotation_col = anno,
color = colorRampPalette(c("blue", "white", "red"))(50), show_rownames = F)
(cluster_cols=FALSE 根本不会对样本进行聚类,但这不是我想要的)
我也在另一个论坛上找到了这个,但我不确定如何更改功能代码以及它是否适合我:
clustering_callback callback function to modify the clustering. Is
called with two parameters: original hclust object and the matrix used
for clustering. Must return a hclust object.
您好,我不确定这是否对您有帮助,但是当您检查?pheatmap
并向下滚动到示例时,最后一段代码确实给出了该示例。
# Modify ordering of the clusters using clustering callback option
callback = function(hc, mat){
sv = svd(t(mat))$v[,1]
dend = reorder(as.dendrogram(hc), wts = sv)
as.hclust(dend)
}
pheatmap(test, clustering_callback = callback)
我在我的热图上试过了,之前定义的函数实际上按照我需要的方式对集群进行了排序。尽管我不得不承认(因为我是 R 的新手)我并不完全理解定义的 callback
函数的作用。
也许你也可以用 dendsort
package 写一个函数,据我所知你可以用它重新排列树状图的分支。
# install.packages("dendsort")
library(dendsort)
sort_hclust <- function(...) as.hclust(dendsort(as.dendrogram(...)))
cluster_cols=sort_hclust(hclust(dist(mat)))
在这种情况下,幸运的是列的聚类与样本编号顺序一致(类似于树状图)所以我添加了 cluster_cols = FALSE 并解决了重新聚类列的问题(并避免编写回调函数。
pheatmap(mat,
annotation_col = anno,
fontsize_row = 2,
show_rownames = T,
cutree_rows = 3,
cluster_cols = FALSE)
我正在绘制一组 15 个样本,分为 A、B、C 三组,热图将它们排序为 C、A、B。(我读过这是因为它绘制在右侧具有最强相似性的簇)。我想对簇进行排序,以便簇的叶子被视为 A、B、C(因此重新组织簇分支的顺序。是否有函数可以帮助我做到这一点?
我用过的代码:
library(pheatmap)
pheatmap(mat, annotation_col = anno,
color = colorRampPalette(c("blue", "white", "red"))(50), show_rownames = F)
(cluster_cols=FALSE 根本不会对样本进行聚类,但这不是我想要的)
我也在另一个论坛上找到了这个,但我不确定如何更改功能代码以及它是否适合我:
clustering_callback callback function to modify the clustering. Is called with two parameters: original hclust object and the matrix used for clustering. Must return a hclust object.
您好,我不确定这是否对您有帮助,但是当您检查?pheatmap
并向下滚动到示例时,最后一段代码确实给出了该示例。
# Modify ordering of the clusters using clustering callback option
callback = function(hc, mat){
sv = svd(t(mat))$v[,1]
dend = reorder(as.dendrogram(hc), wts = sv)
as.hclust(dend)
}
pheatmap(test, clustering_callback = callback)
我在我的热图上试过了,之前定义的函数实际上按照我需要的方式对集群进行了排序。尽管我不得不承认(因为我是 R 的新手)我并不完全理解定义的 callback
函数的作用。
也许你也可以用 dendsort
package 写一个函数,据我所知你可以用它重新排列树状图的分支。
# install.packages("dendsort")
library(dendsort)
sort_hclust <- function(...) as.hclust(dendsort(as.dendrogram(...)))
cluster_cols=sort_hclust(hclust(dist(mat)))
在这种情况下,幸运的是列的聚类与样本编号顺序一致(类似于树状图)所以我添加了 cluster_cols = FALSE 并解决了重新聚类列的问题(并避免编写回调函数。
pheatmap(mat,
annotation_col = anno,
fontsize_row = 2,
show_rownames = T,
cutree_rows = 3,
cluster_cols = FALSE)