Тепловая карта с настраиваемой шкалой цветовой шкалы для значений ниже и выше пороговых значений

Я хотел бы сделать тепловую карту в R, используя pheatmap с зелеными, черными и красными цветами и используя диапазон в легенде от -2 до 2, вот код, который я использовал:

library(pheatmap)
my_palette <- colorRampPalette(c("green", "black", "red"))(n = 201)
colors = c(seq(as.numeric(-2),-0.01,length=100), 0, 
seq(0.01,as.numeric(2),length=100))

pheatmap(mFilt_annot_sort_matrix, color = my_palette, breaks = colors, scale = 
"none", cluster_rows = F, cluster_cols = F, margin = c(5,5))

Проблема в том, что я хотел бы, чтобы значения меньше -2 в зеленом цвете превышали 2 в красном, тогда как в моем решении эти значения белые, не могли бы вы мне помочь?

1 ответ

Вам нужно установить точку останова на -2 и +2 и сделать градиент между ними. Вам также нужно установить цвет меньше минимального и больше максимального желаемого значения. Смотри ниже;

library(pheatmap)

colors <- c(min(mFilt_annot_sort_matrix),seq(-2,2,by=0.01),max(mFilt_annot_sort_matrix))

my_palette <- c("green",colorRampPalette(colors = c("green", "black", "red"))
                                                   (n = length(colors)-3), "red")


pheatmap(mFilt_annot_sort_matrix, color = my_palette, breaks = colors, scale = 
"none", cluster_rows = F, cluster_cols = F, margin = c(5,5))

Пример использования нормальных данных;

С помощью rnorm.within Функция Я делаю следующий набор данных:

#V1 is random between -4 and 4 
#V2 is less than -2
#V3 is greater than 2

df <- data.frame(cbind(rnorm.within(1000, -4, 4)
,rnorm.within(1000,-4,-3), rnorm.within(1000,3,4))) 

и применяя вышеописанную процедуру (те же перерывы и цветовая гамма) для создания тепловой карты, получим:

pheatmap(df, color = my_palette, breaks = colors, scale = 
                  "none", cluster_rows = F, cluster_cols = F, margin = c(5,5))
   

Другие вопросы по тегам