[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