一个简单的问题,
我有一个带数字的向量,例如:
values <- c(0.104654225, 0.001781299, 0.343747296, 0.139326617, 0.375521201, 0.101218053)
Run Code Online (Sandbox Code Playgroud)
我想为这个向量分配一个渐变比例,我知道我可以用它做
gray(values/(max(values))
Run Code Online (Sandbox Code Playgroud)
但我想使用蓝色标度,例如使用colorRampPalette
或类似的东西,
谢谢
我注意到有几个问题与类似的主题,但他们映射间隔,我想将颜色映射到数值
Jos*_*ien 17
编辑:
我现在认为使用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)
Run Code Online (Sandbox Code Playgroud)
在基本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"
Run Code Online (Sandbox Code Playgroud)
在实践中,您可能希望同时使用颜色比例和值的缩放.
## 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="")
Run Code Online (Sandbox Code Playgroud)