我正在尝试使用热图来比较数据.我想将颜色标度设置为对所有颜色标度相同.例如,所有值都在-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))
Run Code Online (Sandbox Code Playgroud)
色标将跨越数据范围,因此对于相同的红绿(50),对于从-1到+1的数据以及从-.2到+2的数据,它将是相同的红色或绿色.在数据范围[-.2,.2]上让颜色跨越[-1,1]的原因是能够在不查看或了解数据范围的情况下可视化数据的差异 - 这是一个探索性的步骤.
该命令redgreen(50)与您的实际值无关,并返回 50 种颜色的向量。您可以使用此颜色向量并提取它的子集以使其适应您的第二个矩阵。
一个例子:
set.seed(1)
r.matrix <- matrix(runif(16, -1, 1), 4, 4)
r1.matrix <- r.matrix / 5
Run Code Online (Sandbox Code Playgroud)
矩阵中的值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)]
Run Code Online (Sandbox Code Playgroud)
使用这些向量为热图着色:
heatmap(r.matrix, Colv = NA, col = rg)
Run Code Online (Sandbox Code Playgroud)

heatmap(r1.matrix, Colv = NA, col = rg_new)
Run Code Online (Sandbox Code Playgroud)

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