gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:49:08 27 4
gpt4 key购买 nike

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

#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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com