如何將一種顏色的十六進制表示轉換爲相應的名稱?將十六進制顏色代碼轉換爲顏色名稱
例如,請考慮以下顏色:
rainbow(4)
# "#FF0000FF" "#80FF00FF" "#00FFFFFF" "#8000FFFF"
他們叫什麼名字(希望的名稱存在每個代碼)?
我發現了功能col2rgb()
,但它並不暗示我所需要的。
如何將一種顏色的十六進制表示轉換爲相應的名稱?將十六進制顏色代碼轉換爲顏色名稱
例如,請考慮以下顏色:
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