R - 将小数矩阵映射到颜色

时间:2014-05-14 00:14:06

标签: r matrix rgb

我有一个介于-1和0之间的值矩阵,我想将它们映射到混合红色的颜色 - >白色 - >蓝色。换句话说,红色为-1,0为白色,蓝色为正1.

接下来,我想从这些颜色中获取rgb值作为三个单独的矩阵。

1 个答案:

答案 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