Сделайте карту кликов более профессиональным в R - PullRequest
0 голосов
/ 05 августа 2020

Я могу построить очень базовые c графики в R, но я пытаюсь сделать свою тепловую карту более профессиональной, и я не уверен, как это сделать. У меня есть фрейм данных df 11 наблюдений 11 переменных:

> dput(df)
structure(list(`0` = c(6.08, 7.91, 5.14, 2.23, 0.72, 0.19, 0.04, 
0.01, 0, 0, 0), `1` = c(9.12, 11.86, 7.71, 3.34, 1.09, 0.28, 
0.06, 0.01, 0, 0, 0), `2` = c(6.84, 8.89, 5.78, 2.5, 0.81, 0.21, 
0.05, 0.01, 0, 0, 0), `3` = c(3.42, 4.45, 2.89, 1.25, 0.41, 0.11, 
0.02, 0, 0, 0, 0), `4` = c(1.28, 1.67, 1.08, 0.47, 0.15, 0.04, 
0.01, 0, 0, 0, 0), `5` = c(0.38, 0.5, 0.33, 0.14, 0.05, 0.01, 
0, 0, 0, 0, 0), `6` = c(0.1, 0.13, 0.08, 0.04, 0.01, 0, 0, 0, 
0, 0, 0), `7` = c(0.02, 0.03, 0.02, 0.01, 0, 0, 0, 0, 0, 0, 0
), `8` = c(0, 0.01, 0, 0, 0, 0, 0, 0, 0, 0, 0), `9` = c(0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0), `10+` = c(0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0)), row.names = c("0", "1", "2", "3", "4", "5", "6", "7", 
"8", "9", "10+"), class = "data.frame")

Итак, я преобразовываю df в матрицу, чтобы получить тепловую карту:

heatmap(data.matrix(df), Rowv=NA, Colv=NA, col = heat.colors(256), scale="column", margins=c(5,10))

Это то, что сюжет выглядит так:

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

Я не знаю, как:

  1. Изменить расположение клавиш для строки и столбцов. Я хочу, чтобы они оба начинались с 0 в верхнем левом углу, а строка и столбец продолжали возрастать до 10 +
  2. . Я также хотел бы большей детализации в цвете. Прямо сейчас вы не можете определить разницу в значениях, глядя на цвет ...

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

1 Ответ

2 голосов
/ 05 августа 2020

Есть несколько библиотек, которые предлагают функции тепловых карт. База IMO heatmap и gplots::heatmap.2 не выдержала хорошего возраста и больше не является лучшим вариантом. 3 хороших варианта: ggplot2::geom_tile, pheatmap и ComplexHeatmap.

Пример данных

Предположим, у нас есть матрица

dta <- matrix(rnorm(25), nrow=5)
rownames(dta) <- letters[1:5]
colnames(dta) <- LETTERS[1:5]

ggplot2 :: geom_tile

Версия ggplot2 требует, чтобы ваши данные были аккуратным фреймом, поэтому мы можем преобразовать нашу матрицу с помощью tidyr::pivot_longer().

dta %>%
  as_tibble(rownames = "myrows") %>%
  pivot_longer(cols = -myrows, names_to = "mycols", values_to = "level") %>%
  ggplot() +
  geom_tile(aes(x=myrows, y=mycols, fill = level))

pheatmap

Пакет pheatmap неплохо генерирует современные тепловые карты. В качестве входных данных требуется матрица. Он может кластеризовать строки и столбцы и создавать дендрограмму, что часто является желаемой функцией. Он также может масштабировать строки и столбцы (эффективно отображая Z-оценку).

pheatmap::pheatmap(dta,
                   scale = "none",
                   cluster_rows = FALSE,
                   cluster_cols = FALSE)

Обратите внимание, что позиции строк и столбцов не такие, как в ggplot. Вы можете посмотреть на параметры, которые позволяют некоторые полезные настройки. Например, если в наших строках есть классы, определенные в другом месте.

ann_df <- data.frame(row.names = rownames(dta),
                     classification = rep(c("first", "second"), times = c(2,3)))
pheatmap::pheatmap(dta,
                   scale = "none",
                   cluster_rows = FALSE,
                   cluster_cols = FALSE,
                   annotation_row = ann_df,
                   gaps_row = c(2))

Цветовая шкала

Одним из важных аспектов, которые делают вашу тепловую карту профессиональным, является цветовая шкала. На ggplot вы должны проверить scale_fill_gradient2().

На pheatmap вы можете попробовать эти настройки для color в качестве отправной точки (см. Документацию по этим функциям):

color = scales::div_gradient_pal(low = "navy",
  mid = "green",
  high="yellow")(seq(0,1,
    length.out = max(dta))),

color = colorRampPalette(RColorBrewer::brewer.pal(n = 9,
      name = "Blues"))(max(dta)),

color = viridisLite::plasma(max(dta)),

ComplexHeatmap

Наконец, недавно успех получил пакет ComplexHeatmap. Он основан на pheatmap, но предлагает множество дополнительных опций. См. ссылку в комментарии zx8754 для получения подробной книги, полной примеров.

...