2014-05-14 27 views
1

我有一個介於-1和0之間的值矩陣,我想將它們映射到混合紅 - >白 - >藍的顏色。換句話說,紅色是-1,0是白色,藍色是正1.R - 將小數點矩陣映射到顏色

接下來,我想從這些顏色中獲取rgb值作爲三個獨立的矩陣。

回答

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 
+0

謝謝!但我的價值觀在矩陣中。該函數需要一個向量。 – CodeGuy

+0

@CodeGuy - 進一步清理它,希望能給你想要的東西。 – thelatemail

+0

謝謝你搖滾! – CodeGuy