Search code examples
rcolorsplotpalettecolor-palette

How to use defined colors as a palette in R


I have following list of colors:

ddf = structure(list(r = c(0.374, 0.374, 0.051, 0.096, 0.876, 0.415, 
+ 0.596, 0.724, 0.847, 0.588, 0.481, 0.142, 0.819, 0.91, 0.969, 
+ 0.887, 0.432, 0.927, 0.381, 0.04), g = c(0.183, 0.905, 0.662, 
+ 0.706, 0.461, 0.845, 0.07, 0.101, 0.434, 0.885, 0.366, 0.075, 
+ 0.737, 0.722, 0.012, 0.536, 0.967, 0.125, 0.646, 0.898), b = c(0.528, 
+ 0.337, 0.028, 0.898, 0.628, 0.286, 0.523, 0.673, 0.937, 0.604, 
+ 0.337, 0.276, 0.658, 0.979, 0.451, 0.123, 0.446, 0.332, 0.656, 
+ 0.798)), .Names = c("r", "g", "b"), class = "data.frame", row.names = c(NA, 
+ -20L))
> 
> ddf
       r     g     b
1  0.374 0.183 0.528
2  0.374 0.905 0.337
3  0.051 0.662 0.028
4  0.096 0.706 0.898
5  0.876 0.461 0.628
6  0.415 0.845 0.286
7  0.596 0.070 0.523
8  0.724 0.101 0.673
9  0.847 0.434 0.937
10 0.588 0.885 0.604
11 0.481 0.366 0.337
12 0.142 0.075 0.276
13 0.819 0.737 0.658
14 0.910 0.722 0.979
15 0.969 0.012 0.451
16 0.887 0.536 0.123
17 0.432 0.967 0.446
18 0.927 0.125 0.332
19 0.381 0.646 0.656
20 0.040 0.898 0.798
> 

How can I use it in the same manner as following command for rainbow() color palette:

barplot(rep(1,100), yaxt='n',col=rainbow(100))

Following works:

barplot(rep(1,100), yaxt='n',col=with(ddf, rgb(r,g,b)))

However, here color sequence is repeating (5 times) rather than palette getting stretched from one end to another.


Solution

  • In this case, the colorRampPalette() function is your friend. First, let's define

    mycols<-with(df, rgb(r,g,b))
    

    Now we start, without repeating

    barplot(rep(1,20), yaxt='n',col=mycols)
    

    enter image description here

    now, with repeating

    barplot(rep(1,100), yaxt='n',col=mycols)
    

    enter image description here

    now, with interpolation from colorRampPalette

    barplot(rep(1,100), yaxt='n',col=colorRampPalette(mycols)(100))
    

    enter image description here