установить цветовую шкалу для тепловой карты

Я пытаюсь сравнить данные с помощью тепловых карт. Я хочу, чтобы цветовая шкала была одинаковой для всех из них. например, все по шкале значений от -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)

enter image description here

heatmap(r1.matrix, Colv = NA, col = rg_new)

enter image description here

диапазон цветов во второй тепловой карте меньше, чем диапазон в первой тепловой карте.