Как привязать цветовую шкалу к минимуму / максимуму для каждой строки, используя pheatmap в R - PullRequest
0 голосов
/ 25 января 2019

В настоящее время я использую pheatmap в R для создания тепловой карты выражений генов из данных отдельной ячейки.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я не могу воспроизвести относительную цветовую шкалу, используемую вдругие генераторы тепловых карт, такие как Morpheus: https://software.broadinstitute.org/morpheus/

Для уточнения, у Morpheus цветовая шкала может быть привязана к минимальному и максимальному значениям выражения для каждой строки.Например, предполагая, что цветовая шкала проста, как c('dark_blue', 'blue', 'bright_blue', 'white', 'bright_red', 'red', 'dark_red'), и я предоставляю матрицу, которая выглядит как t(data.frame(row1=c(0, 1, 2, 3, 4, 5, 6), row2=c(10, 11, 12, 13, 14, 15, 16))), Морфеус закрасит 0 темно-синим и 6 темно-красным цветом в первом ряду, тогда как 10 будет темно-синим, а 16 будеттемно-красный во втором ряду.Цветная полоса представляет относительные минимальные и максимальные значения для каждой строки.

Обратите внимание, что это не то же самое, что простое масштабирование данных, что я и делал в pheatmap.Проблема в том, что если у меня что-то вроде t(data.frame(row1=c(1, 2, 3, 4, 5, 6), row2=c(10, 0, 0, 0, 0, 0))), то даже масштабирование данных не позволит темно-красному цвету 6 (~ 1,34 после масштабирования), поскольку цветовая шкала привязана к минимуму (~ -0,41 после масштабирования)и максимум (~ 2,04 после масштабирования) для всей тепловой карты.

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

1 Ответ

0 голосов
/ 26 января 2019

Вы можете масштабировать данные по строкам следующим образом:

mat <- t(data.frame(row1=c(0, 1, 2, 3, 4, 5, 6), row2=c(10, 11, 12, 13, 14, 15, 16)))
mat2 <- t(apply(mat, 1, scale))

Тогда pheatmap имеет аргумент cluster_cols, который вы можете установить на FALSE.Сложив все это вместе, мы получим 0 и 10 темно-синим в окончательной тепловой карте

pheatmap(mat2, cluster_cols = F)

enter image description here

...