R:为定义的用户调色板中的值向量分配适当的颜色

R: assign appropriate color to a vector of values from a defined user palette

我有一个数字向量和一个调色板,如下所示。

我不想做任何类型的绘图,我唯一想要的是根据调色板为每个数值分配适当的颜色...

所需的输出将是一个将值与颜色相关联的数据框。有简单的方法吗?

my_palette <- grDevices::colorRampPalette(c("green","black","red"))(11)
my_vector <- c(runif(150,1,10))
my_df <- data.frame(value=my_vector, color=my_palette[1])


> head(my_df)
     value   color
1 4.029890 #00FF00
2 1.933029 #00FF00
3 4.921888 #00FF00
4 5.467826 #00FF00
5 9.232608 #00FF00
6 7.353821 #00FF00

你可以使用 cut:

ncolors <- 11
my_palette <- grDevices::colorRampPalette(c("green","black","red"))(ncolors)

my_df <- data.frame(value=my_vector, color=my_palette[cut(my_vector,ncolors)])

head(my_df)

     value   color
1 1.289565 #00FF00
2 3.651295 #006500
3 4.750783 #003200
4 6.506106 #330000
5 5.615058 #000000
6 3.216121 #009900

你肯定在一条会带你去那里的路上:


library(spatstat)

set.seed( 100 )
my_palette <- grDevices::colorRampPalette(c("green","black","red"))(11)
my_vector <- c(runif(150,1,10))
cmap <- colourmap( my_palette, range=range(my_vector) )

my_df <- data.frame(value=my_vector, color= cmap( my_vector ) )


> head( my_df )
     value   color
1 3.769895 #006500
2 3.319053 #009900
3 5.970902 #330000
4 1.507448 #00FF00
5 5.216944 #000000
6 5.353937 #000000

另见 this answer

主题变体:

my_palette <- grDevices::colorRampPalette(c("green","black","red"))(11)
set.seed(123)
my_vector <- c(runif(150,1,10))

my_df <- data.frame(value = my_vector,
                    color = cut(my_vector, 11, labels = my_palette))
head(my_df)
#>      value   color
#> 1 3.588198 #006500
#> 2 8.094746 #990000
#> 3 4.680792 #003200
#> 4 8.947157 #CC0000
#> 5 9.464206 #FF0000
#> 6 1.410008 #00FF00

reprex package (v2.0.0)

于 2021-04-30 创建

您可以使用 colorRamp 而不是 colorRampPalette,其中 returns 一个将区间 [0,1] 映射到颜色的函数。

myPalette <- colorRamp(c("green","black","red"))

将您的值映射到区间 [0,1]:

my_vector_normalized <- (my_vector - min(my_vector)) / (max(my_vector) - min(my_vector))

然后:

my_df <- data.frame(value = my_vector, color = myPalette(my_vector_normalized))