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

Cod*_*Guy 1 rgb r matrix

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

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

the*_*ail 5

你可以扩展你的价值-1 to +10 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
}
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)