一个简单的问题,
我有一个带数字的向量,例如:
values <- c(0.104654225, 0.001781299, 0.343747296, 0.139326617, 0.375521201, 0.101218053)
我想为这个向量分配一个渐变比例,我知道我可以用
来做gray(values/(max(values))
但我想使用蓝色色标,例如使用colorRampPalette
或类似的东西,
由于
我注意到有几个类似主题的问题,但它们会映射间隔,我想将颜色映射到数值
答案 0 :(得分:16)
修改强>
我现在认为使用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="")
答案 1 :(得分:1)
我认为你正在寻找colorRamp
而不是colorRampPalette
,因为它将返回一个将从0-1开始对浮点运算的仿函数。根据{{3}}中示例部分的前几行,可能会尝试类似:
f <- colorRamp(c("white", "blue"))
colors <- f(values)
或只是
colors <- colorRamp(c("white", "blue"))(values)