r - 根据向量创建彩虹色标,按照该向量的顺序

标签 r graphics colors

我正在寻找一种更优雅的方法来做到这一点:

#Create Dataset
set.seed(1)
x <- runif(100)
y <- runif(100)
z <- y*x

#Assign colors, based on z vector    
Data <- data.frame(Order=1:length(z),z=z)
Data <- Data[order(Data$z),]
Data$col <- rainbow(length(z))
orderedcolors <- Data[order(Data$Order),'col']

#Plot x vs y, colored by z
plot(x,y,col=orderedcolors)

基本上,我想为 z 向量中的每个点分配一种颜色,并且希望这些颜色从 z 的最低值到最高值以彩虹尺度变化。

最佳答案

您的解决方案为数据的排名分配颜色。如果这就是您的想法,那就太好了。

但是,如果您确实认为数据的应该决定颜色,那么这里有一个解决方案:

首先,你的代码:

#Create Dataset
set.seed(1)
x <- runif(100)
y <- runif(100)
z <- y*x

par(mfrow=c(1,2))
#Assign colors, based on z vector    
Data <- data.frame(Order=1:length(z),z=z)
Data <- Data[order(Data$z),]
Data$col <- rainbow(length(z))
orderedcolors <- Data[order(Data$Order),'col']
plot(x,y,col=orderedcolors, main="Yours")

接下来是我的代码。我使用函数 colorRamp 创建函数,在给定函数输入的情况下在颜色之间进行线性插值。由于 colorRamp 的输入必须在 [0; 范围内] 1],我首先定义一个小辅助函数 range01,将数据缩放到 0 和 1 之间。最后,由于 colorRamp 提供 RGB 值输出,因此我使用 applyrgb 将这些值恢复为 plot 可以理解的颜色:

range01 <- function(x)(x-min(x))/diff(range(x))
rainbow(7)
cRamp <- function(x){
  cols <- colorRamp(rainbow(7))(range01(x))
  apply(cols, 1, function(xt)rgb(xt[1], xt[2], xt[3], maxColorValue=255))
}  

#Plot x vs y, colored by z
plot(x,y,col=cRamp(z), main="Mine")

结果。请注意轴附近颜色的不同分布。

enter image description here

关于r - 根据向量创建彩虹色标,按照该向量的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7420281/

相关文章:

r - 如何在 rbga.bin 包 genalg 中设置交叉率?

javascript/jquery getImageData 图像颜色选择

android - 有 Android Drawable 设计师吗?

java - 将 RGB 值转换为颜色

javascript - 获取 HSL 值,给定 x、y 和色调

r - 堆积条 ggplot2 上的误差条

r - 在 Knitr 中为 md 或 HTML 输出设置页面宽度

r - 选择 R 中数据框的最后 n 列

c# - 是否有任何选项可以为 Xna 选择纹理过滤

graphics - 使用graphics-draw-line定义过程