标签与背景的对比:判断颜色是浅色还是深色

问题描述 投票:0回答:2

我有一个带有白色标签的条形图。有时背景颜色太浅,白色标签变得难以辨认。我正在寻找一个函数,它接受颜色值并返回颜色是深色还是浅色。然后我可以相应地将标签颜色设置为白色或黑色,以获得与背景的最佳对比度。

r ggplot2 plot colors label
2个回答
10
投票

这是一种根据 @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

0
投票

您也可以使用

farver::decode_colour
直接计算亮度。这是
scales::show_col
使用的方法。

cols <- viridis::viridis(12)
hcl <- farver::decode_colour(cols, to = "hcl")
ifelse(hcl[, "l"] > 50, "black", "white")
© www.soinside.com 2019 - 2024. All rights reserved.