我正在尝试使用热图来比较数据。我想将颜色标度设置为对所有颜色标度相同。例如,所有值都在-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]的原因是能够在不查看或了解数据范围的情况下可视化数据的差异 - 这是一个探索性的步骤。
答案 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)
heatmap(r1.matrix, Colv = NA, col = rg_new)
第二个热图中的颜色范围小于第一个热图中的范围。