我在 R 中使用 ComplexHeatmap 包,并通过 k 均值聚类(行和列)分割我的热图。行的聚类效果很好。对于列,我得到一个 4 列簇(对照)和一个 8 列簇(处理),这很好。但是,对于某些热图,控制滑块位于右侧,而对于某些热图,控制滑块位于左侧。我想统一订购它们(左侧对照,右侧处理)。当我使用 column_split 函数重新排列切片时,我得到 3 个簇而不是 2 个。我该如何解决这个问题?预先感谢您。
Heatmap(mat, name = "mat", border=TRUE, rect_gp =gpar(col="white", lwd=1),
column_km = 2, row_km = 2, row_km_repeats = 100, column_km_repeats = 100,
show_parent_dend_line = FALSE,
column_split = factor(c(rep("A",8),rep("B",4)), levels = c("B","A")))
好吧,我想到了一个想法,但这不是直接的解决方案。
我没有使用默认的 k-means 分区,而是为 column_split 分配了一个分区向量。
pa = cluster::pam(t(mat), k = 2)
Heatmap(mat, name = "mat", border=TRUE, rect_gp =gpar(col="white", lwd=1),
row_km = 2, row_km_repeats = 100, show_parent_dend_line = FALSE,
column_split = paste("pam", pa$clustering))
我仍然希望有其他解决方案。
向热图添加附加参数
cluster_column_slices = FALSE
,
Heatmap(mat, name = "mat", border=TRUE, rect_gp =gpar(col="white", lwd=1), column_km = 2, row_km = 2, row_km_repeats = 100, column_km_repeats = 100, show_parent_dend_line = FALSE, cluster_column_slices = FALSE, column_split = factor(c(rep("A",8),rep("B",4)), levels = c("B","A")))
将解决您的问题。 在这种情况下,您可以通过将分类变量设置为因子来控制切片的顺序。 将
cluster_column_slices
设置为 FALSE
将停止应用于切片平均值的自动附加聚类。
正如 ComplexHeatmap 文档所述,请参阅 https://jokergoo.github.io/ComplexHeatmap-reference/book/a-single-heatmap.html#order-of-slices