[英]R: assign appropriate color to a vector of values from a defined user palette
我有一个数字向量和一个调色板,如下所示。
我不想制作任何类型的 plot,我唯一想要的就是根据调色板为每个数值分配适当的颜色......
所需的 output 将是将值与 colors 相关联的数据帧。 有没有简单的方法来做到这一点?
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
主题的变体:
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
由代表 package (v2.0.0) 于 2021 年 4 月 30 日创建
您肯定走在一条可以带您到达那里的道路上:
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
另请参阅此答案
您可以使用colorRamp
代替colorRampPalette
,它返回将区间 [0,1] 映射到 colors 的 function。
myPalette <- colorRamp(c("green","black","red"))
Map 你的值到区间 [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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.