设置热图的颜色比例

时间:2013-12-18 02:07:38

标签: r colors heatmap

我正在尝试使用热图来比较数据。我想将颜色标度设置为对所有颜色标度相同。例如,所有值都在-0.5到0.5的范围内;

我一直在使用gplots redgreen(50)。但颜色强度重新调整在不同的集合上 数据

例如: 我的r.matrix可以从-1到+1;我的r1.matrix的范围可以从-0.2到+0.2。通过绘制两个热图,如果使用相同的颜色标度,我希望r1.matrix的颜色更加暗淡

hm <- heatmap(r.matrix, Colv = NA, col = redgreen(50))
hm1 <- heatmap(r1.matrix, Colv = NA, col = redgreen(50))

色标将跨越数据范围,因此对于相同的红绿色(50),对于-1到+1范围内的数据以及范围从-.2到+2的数据,它将是相同的红色或绿色。在数据范围[-.2,.2]上让颜色跨越[-1,1]的原因是能够在不查看或了解数据范围的情况下可视化数据的差异 - 这是一个探索性的步骤。

1 个答案:

答案 0 :(得分: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)]

使用这些矢量为热图着色:

heatmap(r.matrix, Colv = NA, col = rg)

enter image description here

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

enter image description here

第二个热图中的颜色范围小于第一个热图中的范围。