首页 > 解决方案 > 在十六进制代码中获取给定颜色的 n 个阴影

问题描述

假设我有这个十六进制代码中的颜色向量(in R):

colors <- c("#62B200","#FF6C91","#F57962","#00C1A9","#EE8044")

我正在寻找一种方法来扩展每种颜色的n深色调(即拉向黑色)。

例如,如果n= 2,这将是扩展颜色data.frame

expanded.colors.df <- data.frame(original.color = c("#62B200","#62B200","#FF6C91","#FF6C91","#F57962","#F57962","#00C1A9","#00C1A9","#EE8044","#EE8044"),
                                 expanded.color = c("#62B200","#58A000","#FF6C91","#E56182","#F57962","#DC6C58","#00C1A9","#00AD98","#EE8044","#D6733D"))

我从这里获取了这些阴影,对于给定的颜色输入,它给出了它的阴影列表。

知道是否有R实现此功能的功能吗?

在此处输入图像描述

标签: rcolorshex

解决方案


物有所值:

library(tidyverse)

colors <- c("#62B200","#FF6C91","#F57962","#00C1A9","#EE8044")

#darken each color n times in increments of steps towards black
ExpandColors <- function(colors, n, steps = 11){
  if(n <= steps){
    suppressWarnings({
      sapply(colors, function(x){colorRampPalette(c(x, "#000000"))(steps)}) %>% 
        as.data.frame() %>% 
        filter(row_number() <= n) %>% 
        gather(key = original.color, value = expanded.color)
    })
  }else{
    warning("Select n < steps!")
  }
}

ExpandColors(colors, n = 2)

       original.color expanded.color
1         #62B200        #62B200
2         #62B200        #58A000
3         #FF6C91        #FF6C91
4         #FF6C91        #E56182
5         #F57962        #F57962
6         #F57962        #DC6C58
7         #00C1A9        #00C1A9
8         #00C1A9        #00AD98
9         #EE8044        #EE8044
10        #EE8044        #D6733D

推荐阅读