Pheatmap: сделать иерархическую кластеризацию на полной матрице, но отображать только подмножество строк - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть набор данных по экспрессии генов, и я хочу показать тепловую карту некоторых генов.Сначала я хочу создать иерархическую кластеризацию на основе всех генов и создать дендрограмму, а затем создать тепловую карту для подмножества этих генов.В явном виде, тепловая карта будет иметь те же столбцы, что и созданная дендрограмма, но отображать меньше строк.Я попытался использовать приведенный ниже код, но похоже, что 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, но потом не было ни дендограммы, ни переупорядочениясделано на всех.

1 Ответ

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

Попробуйте использовать функцию 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 ()

Сделайте то же самое с вашей исходной тепловой картой,обрежьте часть интересующей вас дендрограммы и вставьте ее в фотошоп или закрасьте во второе созданное изображение тепловой карты.

Однако, как упоминалось в моем комментарии, это не «истинная» дендрограмманабор данных с подмножеством, скорее, «фрагмент» исходной тепловой карты.

Дайте мне знать, если это работает!

...