[R] Convert color hex code to color names

Martin Maechler maechler at lynne.stat.math.ethz.ch
Mon Apr 13 19:10:45 CEST 2015


> To add slightly to that:
> What you want to do is write a function that returns the named color that has the smallest difference to your input hex-triplet. But note that color difference is a large topic. Assuming you want to minimize *perceptual* differences, you want to calculate your differences in Lab color space. The function convertColor() has the option to convert hex to Lab. Example:
> convertColor(t(col2rgb("thistle")), from="sRGB", to="Lab", scale.in=255)

> Within Lab space, you can take the Euclidian distance.

> That all said, I can't imagine why one would want to do this in the first place - color triplets are much more convenient than label strings :-)


> B.

About 1-2 years ago, I have improved the 

      demo("colors", package = "grDevices")

demo in R.... with inspiration from Marius Hofert.

The demo now features a  nearRcolor() function 
that was written for somewhat like that purpose.

 ##' Find close R colors() to a given color {original by Marius Hofert)
 ##' using Euclidean norm in (HSV / RGB / ...) color space
 nearRcolor <- function(rgb, cSpace = c("hsv", "rgb255", "Luv", "Lab"),
                        dist = switch(cSpace, "hsv" = 0.10, "rgb255" = 30,
                        "Luv" = 15, "Lab" = 12))
 .............
 .............

It allows to use different color spaces and a default set of
cutoffs, for defining what  "near" means.

I had thought at the time to make a regular function out of
it, but then did not follow up on myself :-)

Martin Maechler,
ETH Zurich and R core team


> On Apr 13, 2015, at 11:45 AM, Thierry Onkelinx <thierry.onkelinx at inbo.be> wrote:

> > A combination of rgb(), col2rgb() and colors() can gives hex values for the
> > named colors.
> > 
> > ir. Thierry Onkelinx
> > Instituut voor natuur- en bosonderzoek / Research Institute for Nature and
> > Forest
> > team Biometrie & Kwaliteitszorg / team Biometrics & Quality Assurance
> > Kliniekstraat 25
> > 1070 Anderlecht
> > Belgium
> > 
> > To call in the statistician after the experiment is done may be no more
> > than asking him to perform a post-mortem examination: he may be able to say
> > what the experiment died of. ~ Sir Ronald Aylmer Fisher
> > The plural of anecdote is not data. ~ Roger Brinner
> > The combination of some data and an aching desire for an answer does not
> > ensure that a reasonable answer can be extracted from a given body of data.
> > ~ John Tukey
> > 
> > 2015-04-13 17:28 GMT+02:00 Alejo C.S. <alej.c.s at gmail.com>:
> > 
> >> Hi all, I want to convert the output of:
> >> 
> >>> rainbow(6)
> >> 
> >>> [1] "#FF0000FF" "#FFFF00FF" "#00FF00FF" "#00FFFFFF" "#0000FFFF"
> >> "#FF00FFFF"
> >> 
> >> To a vector of color names. Any tip?
> >> 
> >> 
> >> Thanks in advance
> >> 
> >> C.



More information about the R-help mailing list