将十六进制颜色代码转换为颜色名称
如何将一种颜色的十六进制表示转换为相应的名称?将十六进制颜色代码转换为颜色名称
例如,请考虑以下颜色:
rainbow(4)
# "#FF0000FF" "#80FF00FF" "#00FFFFFF" "#8000FFFF"
他们叫什么名字(希望的名称存在每个代码)?
我发现了功能col2rgb()
,但它并不暗示我所需要的。
您可以使用方便ience功能color.id
从plotrix
包*:
鉴于指定为十六进制字符串的颜色,发现已知的(命名)色表中最接近的匹配。
library(plotrix)
sapply(rainbow(4), color.id)
# $`#FF0000FF`
# [1] "red" "red1"
#
# $`#80FF00FF`
# [1] "chartreuse" "chartreuse1"
#
# $`#00FFFFFF`
# [1] "cyan" "cyan1"
#
# $`#8000FFFF`
# [1] "purple"
*学分吉姆柠檬和他的答案在这里:Convert color hex code to color names。
也许不是最完美的解决方案,但它应该完成这项工作:
color.names <- function(d) {
# get RGB components of d and convert to data frame
z2 <- as.data.frame(t(col2rgb(d)))
# get RGB components of standard colors and convert them to data frame
z <- as.data.frame(t(sapply(colors(distinct=T),col2rgb)))
colnames(z) <- colnames(z2)
z$name <- rownames(z)
# EDIT: original answer used 'merge', which messed up the order
library(dplyr)
z2 %>% left_join(z) %>% select(name)
}
color.names(rainbow(4))
# name
# 1 red
# 2 <NA>
# 3 cyan
# 4 <NA>
功能color.names
使用输入为col2rgb
相同,即任何三种
矢量的R颜色规范,即 或者颜色名称(如颜色()列出),十六进制字符串 形式“#rrggbb”或“#rrggbbaa”(请参阅rgb),或者一个正整数i 意味着调色板()[一世]。
,所以你可以用它做color.names(1:8)
对于计算效率得到标准颜色的名称,数据与标准颜色设置,可以预先计算如下例:
init.color.names <- function() {
z <- as.data.frame(t(sapply(colors(distinct=T),col2rgb)))
colnames(z) <- colnames(z2)
z$name <- rownames(z)
library(dplyr)
function(d) {
z2 <- as.data.frame(t(col2rgb(d)))
z2 %>% left_join(z) %>% select(name) }
}
cl <- init.color.names()
cl(1:3)
cl(rainbow(4))
看起来不错。谢谢。 “NA”意味着此特定代码不存在任何名称?我想通过一个循环,人们可能会寻找与名称密切相关的颜色。 – 2015-02-11 18:25:56
是的,“NA”表示没有匹配的颜色,关于密切相关的颜色是一个有趣的想法,但我不太确定如何正确定义颜色之间的距离 – 2015-02-11 18:35:07
您只需要获取三个值并计算欧几里德距离 – OganM 2015-02-11 21:13:50
可能更好的方法,但这里有一个使用索引:
colors()[match(rgb(t(col2rgb(rainbow(4))),
maxColorValue = 255), c(rgb(t(col2rgb(colors())), maxColorValue = 255)))]
## [1] "red" NA "cyan" NA
'col2hex'是什么包? – 2015-02-11 19:06:44
'colors()[match(rainbow(4),paste0(col2hex(colors()),'FF'))]''作为您的答案的替代 – 2015-02-11 19:14:17
@MaratTalipov我自己的'report'包,我不是想把它作为答案。 – 2015-02-11 21:21:41
废弃十六进制颜色数据帧,然后在此查找表中获取颜色名称。 – 2015-02-11 18:16:36