Добавить пробел в тепловой карте с помощью пакета pheatmap

Я создал тепловую карту, используя приведенный ниже код:

library(pheatmap)
library(dplyr)

data = data.frame(matrix(runif(10*10), ncol=10))
data$sample = rep(c("tumour", "normal"), 5)
data$subject.ID = paste('Subject', 1:10)
data = data %>% arrange(sample)

# for row annotation
my_sample_col = data %>% select(sample)
rownames(my_sample_col) = data$subject.ID
# data matrix
mat = as.matrix(data %>% select(-sample, -subject.ID))
rownames(mat) = data$subject.ID

pheatmap(mat,
         scale='row',
         annotation_row = my_sample_col,
         annotation_names_row=F,
         cluster_rows = FALSE,
         cluster_cols = FALSE,
         show_colnames = FALSE,
         show_rownames = FALSE)

Я хочу сделать промежуток между строкой 5 и строкой 6, чтобы разделить тепловую карту в соответствии с моей аннотацией строки.

В функции pheatmap аргумент gaps_row, кажется, выполняет свою работу.

vector of row indices that show shere to put gaps into heatmap. Used only if the rows are not clustered.

Я не знаю, как это реализовать. Может кто-то помочь мне с этим? Большое спасибо.


person zesla    schedule 29.12.2018    source источник


Ответы (1)


Я бы рекомендовал использовать пакет ComplexHeatmap (веб-сайт; Gu et al, 2016). Вы можете установить его с помощью devtools::install_github("jokergoo/ComplexHeatmap").

У него больше функций, но вам также нужно потратить больше времени (например, на аннотацию строк и масштабирование матрицы).

library(ComplexHeatmap)

# Create annotation for rows
my_sample_col_ano <- rowAnnotation(sample = my_sample_col$sample,
                                   show_annotation_name = FALSE)

# Scale original matrix row-wise
matS <- t(apply(mat, 1, scale))

# Plot heatmap
Heatmap(matS, 
        # Remove name from fill legend
        name = "",
        # Keep original row/col order
        row_order = rownames(matS), column_order = colnames(matS),
        # Add left annotation (legend with tumor/normal) 
        left_annotation = my_sample_col_ano,
        # ACTUAL SPLIT by sample group 
        row_split = my_sample_col$sample,
        show_row_names = FALSE, show_column_names = FALSE,
        show_row_dend = FALSE, show_column_dend = FALSE,
        row_title = NULL)

введите описание изображения здесь

Если вы хотите использовать исходный pheatmap аргумент передачи для gaps_row, который равен размеру вашей группы (т. Е. Нормальному):

pheatmap(mat,
         scale='row',
         gaps_row = 5,
         annotation_row = my_sample_col,
         annotation_names_row=F,
         cluster_rows = FALSE,
         cluster_cols = FALSE,
         show_colnames = FALSE,
         show_rownames = FALSE)

Если вы можете использовать больше двух групп вместо жесткого кодирования числового значения в gaps_row (т. Е. gaps_row = 5), вы можете передать этот фрагмент (head(as.numeric(cumsum(table(my_sample_col$sample))), -1)).

введите описание изображения здесь

person pogibas    schedule 29.12.2018