Pheatmap: переупорядочить листья в дендограмме - PullRequest
0 голосов
/ 19 февраля 2019

Я создал тепловую карту с соответствующей дендограммой на основе иерархической кластеризации, используя пакет pheatmap .Теперь я хочу изменить порядок листьев на дендограмме.Предпочтительно использовать оптимальный лист метод.Я искал вокруг, но не нашел никакого решения о том, как изменить это достижение.

Буду признателен за предложения о том, как изменить порядок листьев, используя метод оптимальных листьев.

Вотмой пример кода со случайными данными:

mat <- matrix(rgamma(1000, shape = 1) * 5, ncol = 50)
p <- pheatmap(mat, 
         clustering_distance_cols = "manhattan",
         cluster_cols=TRUE,
         cluster_rows=FALSE
         )

1 Ответ

0 голосов
/ 19 февраля 2019

Для «оптимального упорядочения листа» вы можете использовать метод order из библиотеки seriation.pheatmap принимает clustering_callback аргумент.Согласно документации:

clustering_callback функция обратного вызова для изменения кластеризации.Вызывается с двумя параметрами: исходный объект hclust и матрица, используемая для кластеризации.Должен возвращать объект hclust.

Таким образом, вам нужно создать функцию обратного вызова, которая принимает hclust объект и исходную матрицу и возвращает оптимизированный hclust объект.

Вот код:

library(pheatmap)
library(seriation)

cl_cb <- function(hcl, mat){
    # Recalculate manhattan distances for reorder method
    dists <- dist(mat, method = "manhattan")

    # Perform reordering according to OLO method
    hclust_olo <- reorder(hcl, dists)
    return(hclust_olo)
}

mat <- matrix(rgamma(1000, shape = 1) * 5, ncol = 50)
p <- pheatmap(mat, 
         clustering_distance_cols = "manhattan",
         cluster_cols=TRUE,
         cluster_rows=FALSE,
         clustering_callback = cl_cb
         )
...