2015-02-11 197 views
4

如何將一種顏色的十六進制表示轉換爲相應的名稱?將十六進制顏色代碼轉換爲顏色名稱

例如,請考慮以下顏色:

rainbow(4) 
# "#FF0000FF" "#80FF00FF" "#00FFFFFF" "#8000FFFF" 

他們叫什麼名字(希望的名稱存在每個代碼)?

我發現了功能col2rgb(),但它並不暗示我所需要的。

+1

廢棄十六進制顏色數據幀,然後在此查找表中獲取顏色名稱。 – 2015-02-11 18:16:36

回答

2

您可以使用方便ience功能color.idplotrix包*:

鑑於指定爲十六進制字符串的顏色,發現已知的(命名)色表中最接近的匹配。

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

5

也許不是最完美的解決方案,但它應該完成這項工作:

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)) 
+0

看起來不錯。謝謝。 「NA」意味着此特定代碼不存在任何名稱?我想通過一個循環,人們可能會尋找與名稱密切相關的顏色。 – 2015-02-11 18:25:56

+0

是的,「NA」表示沒有匹配的顏色,關於密切相關的顏色是一個有趣的想法,但我不太確定如何正確定義顏色之間的距離 – 2015-02-11 18:35:07

+0

您只需要獲取三個值並計算歐幾里德距離 – OganM 2015-02-11 21:13:50

3

可能更好的方法,但這裏有一個使用索引:

colors()[match(rgb(t(col2rgb(rainbow(4))), 
    maxColorValue = 255), c(rgb(t(col2rgb(colors())), maxColorValue = 255)))] 


## [1] "red" NA  "cyan" NA 
+2

'col2hex'是什麼包? – 2015-02-11 19:06:44

+1

'colors()[match(rainbow(4),paste0(col2hex(colors()),'FF'))]''作爲您的答案的替代 – 2015-02-11 19:14:17

+0

@MaratTalipov我自己的'report'包,我不是想把它作爲答案。 – 2015-02-11 21:21:41

相關問題