2013-12-18 2 views
6

Я пытаюсь сравнить данные с использованием тепловых карт. Я хочу, чтобы цветовая шкала была одинаковой для всех из них. например, все на шкале для значений от -0,5 до 0,5;комплект цветовая гамма для heatmap

Я использую gplots redgreen (50). но интенсивности цвета масштабируются на разных наборах данных .

например: my r.matrix может варьироваться от -1 до +1; и моя r1.matrix может варьироваться от -0,2 до +0,2. путем построения двух Heatmap, если положить на той же цветовой гамме, я бы ожидать, что цвет r1.matrix гораздо тусклее

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

ответ

4

Команда 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)] 

Используйте эти векторы окрашивать тепловые карты:

enter image description here

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

enter image description here

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

+0

Thanks Sven Hohenstein - Цветовая гамма будет охватывать диапазон данных, поэтому с тем же красным (50) он будет таким же красным или зеленым для данных в диапазоне от -1 до +1 и для данных от -.2 до +.2. но причина, по которой цветной диапазон [-1,1] в диапазоне данных [-.2, .2] должен быть способен визуализировать разницу в данных. Какая разница между двумя наборами данных неизвестна ... – user2783615

+0

@ user2783615 Я обновил ответ. Теперь создание второго вектора цветов возможно без предварительного знания диапазона матрицы 2 (но оно должно быть меньше). –

+0

Большое спасибо Свен! Твое - хорошее решение. Я закончил комбинирование всех матриц после кластеризации и добавил промежуточные столбцы, а затем построил их вместе, чтобы поместить их в один и тот же масштаб. Во всяком случае, он дал хорошие наглядные пособия. – user2783615

Смежные вопросы