【问题标题】:Getting n shades of a given color in hex code [duplicate]在十六进制代码中获取给定颜色的n个阴影[重复]
【发布时间】:2019-04-03 22:45:21
【问题描述】:

假设我有这个十六进制代码的颜色向量(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"))

我从here 中获取了这些色调,对于给定的颜色输入,它会给出它的色调列表。

知道是否有一个R 函数可以实现这一点吗?

【问题讨论】:

    标签: r colors hex


    【解决方案1】:

    物有所值:

    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
    

    【讨论】:

    • 我认为这需要一个额外的库,不是吗?我有一个纯 JavaScript 解决方案。
    • /** from stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb / function componentToHex(c) ... function rgbToHex(r, g, b) ... function hexToRgb(hex) ... function one( comp, shade) { return Math.round((255 - comp) * shade / 10) + comp; } / 计算阴影。 basecolor 是像 '#fec810' 这样的十六进制颜色,阴影从 0 到 9 **/ function computeColorShade(basecolor, shade) { let rgb = hexToRgb(basecolor);让 r = 一(rgb.r);让 g = one(rgb.g);让 b = 一(rgb.b);返回 rgbToHex(r,g,b); }
    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 2011-01-16
    • 2014-05-02
    • 1970-01-01
    • 2012-11-04
    • 2011-09-20
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多