Избегайте переупорядочения строк и столбцов в тепловой карте (r) - PullRequest
0 голосов
/ 22 апреля 2019

Я использую ComplexHeatmap для отображения данных, однако, когда я начинаю делить матрицу, чтобы ее было легче читать, порядок моих строк / столбцов выглядит перетасованным.

Интересно, возможно, я неправильно указываю, какой порядок использовать, а не является ли это проблемой, напрямую связанной с использованием ComplexHeatmap. Например, было ли что-то не так с:

    Heatmap( as.matrix(MyData), name = "q", 
             column_names_rot = 0,
             col = my_palette,
             # ! ---> This should set the row order!!
             row_order = order(rownames(as.matrix(MyData))),
             # ! ---> This should set the column order!!
             column_order = order(colnames(as.matrix(MyData))),
             row_split = rep(c("A", "B","C", "D"), 6),
             column_split = rep(c("A", "B","C", "D"), 6),
             cluster_row_slices = FALSE,
             cluster_column_slices =FALSE,
             heatmap_legend_param = list(
               title = "Legend",
               col = my_palette,
               at = (c(0.05,0.03,0.01,0.000001)), 
               legend_height = unit(6, "cm")),
    )

Следующие аргументы являются ключевыми для этого вопроса:

                 # ! ---> This should set the row order!!
                 row_order = order(rownames(as.matrix(MyData))),
                 # ! ---> This should set the column order!!
                 column_order = order(colnames(as.matrix(MyData))),

Когда я создаю эту тепловую карту, строки и столбцы расположены не по порядку. например,

enter image description here

Теперь, когда я удаляю команды row_split и column_split, мне не нужно устанавливать порядок row_order и columns_order, и это выглядит так:

enter image description here

С тех пор я обнаружил, что когда я использую row_order и column_order без разделения, он все равно фактически тасует мой заказ?

enter image description here

Очевидно, я даже не могу сохранять первоначальный порядок по команде, когда захочу. Я задавался вопросом, может ли кто-нибудь дать представление об этом.

Вот пример матрицы, которая может быть сделана из их подтверждающих документов (они действительно охватывают row_order, но я должен что-то упустить из виду). Возможно, вы захотите избежать перестановки имен, но я нервничаю из-за того, что изменяю их, поскольку сам не могу использовать команды.

library(devtools)
install_github("jokergoo/ComplexHeatmap", force = TRUE)
library(ComplexHeatmap)

set.seed(123)
nr1 = 4; nr2 = 8; nr3 = 6; nr = nr1 + nr2 + nr3
nc1 = 6; nc2 = 8; nc3 = 10; nc = nc1 + nc2 + nc3
mat = cbind(rbind(matrix(rnorm(nr1*nc1, mean = 1,   sd = 0.5), nr = nr1),
          matrix(rnorm(nr2*nc1, mean = 0,   sd = 0.5), nr = nr2),
          matrix(rnorm(nr3*nc1, mean = 0,   sd = 0.5), nr = nr3)),
    rbind(matrix(rnorm(nr1*nc2, mean = 0,   sd = 0.5), nr = nr1),
          matrix(rnorm(nr2*nc2, mean = 1,   sd = 0.5), nr = nr2),
          matrix(rnorm(nr3*nc2, mean = 0,   sd = 0.5), nr = nr3)),
    rbind(matrix(rnorm(nr1*nc3, mean = 0.5, sd = 0.5), nr = nr1),
          matrix(rnorm(nr2*nc3, mean = 0.5, sd = 0.5), nr = nr2),
          matrix(rnorm(nr3*nc3, mean = 1,   sd = 0.5), nr = nr3))
   )
mat = mat[sample(nr, nr), sample(nc, nc)] # random shuffle rows and columns
rownames(mat) = paste0("row", seq_len(nr))
colnames(mat) = paste0("column", seq_len(nc))

Heatmap(mat)

Вот несколько примеров того, что я пытался:

                 #row_order = sort(rownames(as.matrix(MyData))),
                 #row_order = rownames((MyData)),
                 #row_order = sort(rownames(MyData)),
                 #row_order = order((gsub("row", "", rownames(MyData)))),
                 #row_order = order(colnames(as.matrix(MyData))),
                 #column_order = order(rownames(as.matrix(MyData))),
                 #column_order = colnames(MyData),
                 #row_order = order(rownames(MyData)),
                 #column_order = order(as.matrix(MyData)),
                 #row_order = order(rownames(MyData)),
                 #column_order = order(colnames(MyData)),
                 #row_order = sort(c("C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6")),
                 #olumn_order = sort(c("C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6", "C1", "C2", "C3", "C4", "C5", "C6")),
                 #column_order = order(colnames(MyData)),
                 #column_order = sort(as.numeric(as.matrix(MyData))),
                 #column_order = order(colnames(MyData)),
                 #row_order = (MyData),
                 #column_order = sort(colnames(as.matrix(MyData))),
                 #row_order = rownames(MyData),
                 #row_order = sort(gsub("row", "", rownames(MyData))),
                 #row_order = order(colnames(as.matrix(MyData))),
                 #column_order = sort(colnames(as.matrix(MyData))),
                 #row_order = order(as.numeric(gsub("row", "", rownames(as.matrix(MyData))))), 
                 #column_order = order(as.numeric(gsub("column", "", colnames(as.matrix(MyData))))),
                 #row_order = order(rownames(as.matrix(MyData))), 
                 #column_order = order(colnames(as.matrix(MyData))),
                 #row_order = order(rownames(as.matrix(MyData))), 
                 #column_order = order(colnames(as.matrix(MyData))),

1 Ответ

0 голосов
/ 24 апреля 2019

Я думаю, дело в том, как правильно установить переменную, которая разбивает тепловую карту.

Heatmap( (MyData), name = "namehere", 
             column_names_rot = 0,
             col = my_palette,
             cluster_rows = FALSE,
             cluster_columns = FALSE,
             row_split = rep(1:4, each = 6),
             column_split = rep(1:4, each = 6),
             heatmap_legend_param = list(
               title = "Legend",
               col = my_palette,
               at = (c(0.05,0.03,0.01,0.000001)), 
               legend_height = unit(6, "cm")),
            border = TRUE
    )

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...