установить цветовую шкалу для тепловой карты
Я пытаюсь сравнить данные с помощью тепловых карт. Я хочу, чтобы цветовая шкала была одинаковой для всех из них. например, все по шкале значений от -0.5 до 0.5;
Я использую gplots redgreen (50). но интенсивности цвета масштабируются на разных наборах данные.
например: мой Р.матрица может быть в диапазоне от -1 до +1; и мой Р1.матрица может колебаться от -0.2 до +0.2. построив две тепловые карты, если поставить на ту же цветовую шкалу, я ожидал бы, что цвет для R1.матрица будет намного тусклее
hm <- heatmap(r.matrix, Colv = NA, col = redgreen(50))
hm1 <- heatmap(r1.matrix, Colv = NA, col = redgreen(50))
цветовая шкала будет охватывать диапазон данных, поэтому с тем же redgreen(50) она будет такой же красной или зеленой для данных от -1 до +1 и для данных от -.2 к +.2. причина, чтобы позволить цвету охватывать [-1,1] в диапазоне данных [ -.2, .2] должен быть в состоянии визуализировать разницу в данных, не глядя или зная диапазон данных-исследовательский шаг.
1 ответов
команда redgreen(50)
не зависит от фактических значений и возвращает вектор из 50 цветов. Вы можете использовать этот цветовой вектор и извлечь его подмножество, чтобы адаптировать его ко второй матрице.
пример:
set.seed(1)
r.matrix <- matrix(runif(16, -1, 1), 4, 4)
r1.matrix <- r.matrix / 5
значения в матрице r1.matrix
являются одной пятой значений в r.matrix
.
теперь, цветовые векторы могут быть созданы следующим образом:
library(gplots)
rg <- redgreen(50) # the original color vector
# range of values in first matrix around median
r1 <- range(r.matrix) - median(r.matrix)
# range of values in second matrix around median
r2 <- range(r1.matrix) - median(r1.matrix)
# relative distances to median of second compared to first matrix
prop <- r1 / r2
# center of colcor vector
cent <- length(rg) / 2 + 0.5
# calculate indices of shorter color vector for the second matrix
ind <- cent / prop
idx <- round(cent - c(1, -1) * ind)
# new color vector
rg_new <- rg[Reduce(seq, idx)]
используйте эти векторы для окрашивания тепловые карты:
heatmap(r.matrix, Colv = NA, col = rg)
heatmap(r1.matrix, Colv = NA, col = rg_new)
диапазон цветов во второй тепловой карте меньше, чем диапазон в первой тепловой карте.