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>
4条答案
按热度按时间k3bvogb11#
您可以使用
plotrix
软件包 * 中的便捷函数color.id
:给定指定为十六进制字符串的颜色,在已知(命名)颜色表中查找最接近的匹配。
rqcrx0a62#
也许不是最优雅的解决方案,但它应该可以完成工作:
函数
color.names
使用与col2rgb
相同的输入,即三种R颜色规范中任意一种的矢量,即颜色名称(由colors()列出)、“#rrggbb”或“#rrggbaa”形式的十六进制字符串(参见rgb)或表示palette()[i]的正整数i。
所以你可以通过
color.names(1:8)
得到标准颜色的名字为了提高计算效率,可以如本例中那样预先计算具有标准颜色的数据集:
2ic8powd3#
也许更好的方法,但这里有一个使用索引:
rqenqsqc4#
这是一个更“简洁”的解决问题的方法。它为RGB十六进制代码和颜色名称(来自
colors()
)创建了一个查找表。然后你可以用你的RGB十六进制代码做一个left_join来得到相关的颜色名称(如果它存在于
colors()
中)