我有一个介于-1和0之间的值矩阵,我想将它们映射到混合红色的颜色 - >白色 - >蓝色。换句话说,红色为-1,0为白色,蓝色为正1.
接下来,我想从这些颜色中获取rgb值作为三个单独的矩阵。
答案 0 :(得分:5)
您可以将您的值-1 to +1
扩展为0 to 1
,然后使用colorRamp
。使用矩阵m
并返回r/g/b
值数组的完整函数将是:
m <- matrix(seq(-1,1,length.out=9),nrow=3)
# [,1] [,2] [,3]
#[1,] -1.00 -0.25 0.50
#[2,] -0.75 0.00 0.75
#[3,] -0.50 0.25 1.00
colsel <- function(m,cols) {
x <- as.vector(m)
xscal <- scale(x,center=min(x),scale=diff(range(x)))
out <- colorRamp(cols)(xscal)
dim(out) <- c(dim(m),3)
dimnames(out) <- list(NULL,NULL,cols)
out
}
结果:
colsel(m, c("red","white","blue"))
#, , red
#
# [,1] [,2] [,3]
#[1,] 255 255.00 127.50
#[2,] 255 255.00 63.75
#[3,] 255 191.25 0.00
#
#, , white
#
# [,1] [,2] [,3]
#[1,] 0.00 191.25 127.50
#[2,] 63.75 255.00 63.75
#[3,] 127.50 191.25 0.00
#
#, , blue
#
# [,1] [,2] [,3]
#[1,] 0.00 191.25 255
#[2,] 63.75 255.00 255
#[3,] 127.50 255.00 255