[R] Mean of hexadecimal numbers

Atte Tenkanen attenka at utu.fi
Sat Apr 16 18:33:45 CEST 2016


Hm...,

Should these two versions produce the same solution? Unfortunately and 
shame to confess, I don't know much about the colors in R:

myColors <- c("#FF7C00","#00BF40","#FFFF00")
Colors=rgb2hsv(col2rgb(myColors))
apply(Colors,1,mean)

         h         s         v
0.2122974 1.0000000 0.9163399

* * * * *

# Average the 1st two by taking the middle colour of a 3 colour palette
x <- colorRampPalette(c("#FF7C00","#00BF40"), space = "Lab")(3)[2]

# Average in the third by taking the 2nd of a 4 colour palette, so x
# gets twice the weight
colorRampPalette(c(x, "#FFFF00"), space = "Lab")(4)[2]

rgb2hsv(col2rgb(colorRampPalette(c(x, "#FFFF00"), space = "Lab")(4)[2]))

        [,1]
h 0.1597633
s 0.8407960
v 0.7882353

Atte T.


16.4.2016, 19.03, Duncan Murdoch kirjoitti:
> On 16/04/2016 8:47 AM, Atte Tenkanen wrote:
>> Hi,
>>
>> How would you calculate the "mean colour" of several colours, for
>> example c("#FF7C00","#00BF40","#FFFF00")?
>>
>
> Bert answered your subject line question.  Your text is asking 
> something else:  if those are colours, you don't want to treat each of 
> them as a single integer.
>
> A simple-minded approach would split them into 3 hex numbers, and 
> average those (using Bert's solution).
>
> A more sophisticated approach would take into account that they are 
> really colours.  You could probably put together something using the 
> colorRamp or colorRampPalette functions to average in perception 
> space.  For example,
>
> # Average the 1st two by taking the middle colour of a 3 colour palette
> x <- colorRampPalette(c("#FF7C00","#00BF40"), space = "Lab")(3)[2]
>
> # Average in the third by taking the 2nd of a 4 colour palette, so x
> # gets twice the weight
> colorRampPalette(c(x, "#FFFF00"), space = "Lab")(4)[2]
>
> Duncan Murdoch



More information about the R-help mailing list