我有一个带有白色标签的条形图。有时背景颜色太浅,白色标签变得难以辨认。我正在寻找一个函数,它接受颜色值并返回颜色是深色还是浅色。然后我可以相应地将标签颜色设置为白色或黑色,以获得与背景的最佳对比度。
这是一种根据 @MrFlick 提供的(第二个)链接中的强度比例来实现选择黑色与白色文本颜色的策略。
该博客引用了 W3C 出版物:计算颜色感知亮度的标准公式,使用 RGB 编码颜色的算法:
((Red value X 299) + (Green value X 587) + (Blue value X 114)) / 1000
col2rgb
函数提供一个 3 行矩阵,我将其乘以该网页中提供的因子。我使用“红色”作为背景颜色的示例,然后选择的文本将是“白色”
c( "black", "white")[ 1+(sum( col2rgb("red") *c(299, 587,114))/1000 < 123) ]
[1] "white"
作为函数实现:
isDark <- function(colr) { (sum( col2rgb(colr) * c(299, 587,114))/1000 < 123) }
isDark("red")
[1] TRUE
您也可以使用
farver::decode_colour
直接计算亮度。这是scales::show_col
使用的方法。
cols <- viridis::viridis(12)
hcl <- farver::decode_colour(cols, to = "hcl")
ifelse(hcl[, "l"] > 50, "black", "white")