2014-03-07 35 views
3

一個快速的問題的,顏色分配給一個數值範圍

我有一個數字的載體,例如:

values <- c(0.104654225, 0.001781299, 0.343747296, 0.139326617, 0.375521201, 0.101218053) 

,我想一個梯度規模分配給這個載體,我知道我可以

gray(values/(max(values)) 

做,但我想用一個藍色規模,例如使用colorRampPalette或類似的東西,

感謝

我注意到,有主題類似的幾個問題,但它們映射區間和我想的顏色映射到數值

+0

如果這是一個具體的R-問題,你應該把標題中,或對問題的至少一部分主體。 –

+1

@TylerDurden不,他不應該http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles –

+0

該meta post只是說沒有*要求*放置標題中的語言。儘管如此,如果這樣做是完全正確的,並且在語言不是其中一種主要語言的情況下,我會建議在標題中加入該語言,以便人們可以輕鬆地忽略該問題而不會忽略該問題標籤。 –

回答

10

編輯: 我現在想用colorRampPalette()使這一點更容易比colorRamp()

## Use n equally spaced breaks to assign each value to n-1 equal sized bins 
ii <- cut(values, breaks = seq(min(values), max(values), len = 100), 
      include.lowest = TRUE) 
## Use bin indices, ii, to select color from vector of n-1 equally spaced colors 
colors <- colorRampPalette(c("lightblue", "blue"))(99)[ii] 

## This call then also produces the plot below 
image(seq_along(values), 1, as.matrix(seq_along(values)), col = colors, 
     axes = F) 

在基礎R功能,colorRamp()是你在找什麼。如dg99所示,它會返回一個函數,將[0,1]範圍內的值映射到一系列顏色。

不幸的是,它返回一個RGB值的矩陣,它不能被大多數R的繪圖函數直接使用。大多數這些函數採用col=參數,它將「希望」的sRGB值表示爲類似於"#E4E4FF""#9F9FFF"的字符串中的十六進制值。爲了得到這些,你需要將rgb()函數應用到由colorRamp()返回的矩陣。這裏有一個例子:

f <- colorRamp(c("white", "blue")) 
(colors <- rgb(f(values)/255)) 
# [1] "#E4E4FF" "#FFFFFF" "#A7A7FF" "#DBDBFF" "#9F9FFF" "#E5E5FF" 

在實踐中,你可能會想玩弄兩個色階和你的價值觀的縮放。

## Scale your values to range between 0 and 1 
rr <- range(values) 
svals <- (values-rr[1])/diff(rr) 
# [1] 0.2752527 0.0000000 0.9149839 0.3680242 1.0000000 0.2660587 

## Play around with ends of the color range 
f <- colorRamp(c("lightblue", "blue")) 
colors <- rgb(f(svals)/255) 

## Check that it works 
image(seq_along(svals), 1, as.matrix(seq_along(svals)), col=colors, 
     axes=FALSE, xlab="", ylab="") 

enter image description here

1

我認爲你正在尋找colorRamp,而不是colorRampPalette ,因爲它會返回一個函數,它將在0-1的浮點數上運行。基於documentation的例子節的前幾行,也許你可以試試:

f <- colorRamp(c("white", "blue")) 
colors <- f(values) 

或只是

colors <- colorRamp(c("white", "blue"))(values) 
+0

'plot(values,pch = 19,col = f(values))'藍色,黃色,粉紅色和綠色的情節 –

+0

是的,絕對玩弄顏色,直到你得到你想要的。根據您的操作系統,「R」可能支持或不支持其中一些顏色名稱。您可能必須提供十六進制值。 – dg99

+0

謝謝@ dg99,colorRamp這是我一直在尋找 – user2380782