R Plot Color

In this article, you will learn about colors in R programming. More specifically, different colors names used in R, plots using color HEX and RGB values, and built-in color palettes in R.

We can visually improve our plots by coloring them. This is generally done with the col graphical parameter.

We can specify the name of the color we want as a string. Let us look at an example.

We use the following temp vector to create a barplot throughout this section.

# create a vector 'temp' with numeric values
temp <- c(5, 7, 6, 4, 8)

# Plot 1: Bar plot with default settings
barplot(temp, main = "By default")

# Plot 2: Bar plot with custom coloring
barplot(temp, col = "coral", main = "With coloring")
Coloring a Bar Plot in R
Coloring a Bar Plot in R

Here we use the color coral. Try replacing it with green, blue, violet etc. and look at the difference.

Using Color Names

R programming has names for 657 colors. You can take a look at them all with the colors() function, or simply check this R color pdf.



[1] "white"                "aliceblue"            "antiquewhite"        
[4] "antiquewhite1"        "antiquewhite2"        "antiquewhite3"       
[7] "antiquewhite4"        "aquamarine"           "aquamarine1"
[655] "yellow3"              "yellow4"              "yellowgreen"

This returns a vector of all the color names in alphabetical order with the first element being white. You can color your plot by indexing this vector.

For example, col=colors()[655] is the same as col="yellow3".

Using Hex Values as Colors

Instead of using a color name, color can also be defined with a hexadecimal value.

We define a color as a 6 hexadecimal digit number of the form #RRGGBB. Where the RR is for red, GG for green and BB for blue and value ranges from 00 to FF.

For example, #FF0000 would be red and #00FF00 would be green similarly, #FFFFFF would be white and #000000 would be black.

barplot(temp, col="#c00000", main="#c00000")
barplot(temp, col="#AA4371", main="#AA4371")
Coloring with hex values in R programming
Coloring with hex values in R programming

Using RGB Values

The function rgb() allows us to specify red, green and blue components with a number between 0 and 1.

This function returns the corresponding hex code discussed above.

# RGB representation: rgb(0, 1, 0)
result1 <- rgb(0, 1, 0)

# RGB representation: rgb(0.3, 0.7, 0.9)
result2 <- rgb(0.3, 0.7, 0.9)


[1] "#00FF00"
[1] "#4DB3E6"

We can specify in the range 0 to 255 with the additional argument max=255.

# RGB representation: rgb(55, 0, 77, max = 255)
result <- rgb(55, 0, 77, max = 255)


[1] "#37004D"
Coloring with Bar Plot With RGB Values in R
Coloring with Bar Plot With RGB Values in R

Color Cycling in R

We can color each bar of the barplot with a different color by providing a vector of colors.

If the number of colors provided is less than the number of bars, the color vector is recycled.

We can see this in the following example.

# Plot 2: Bar plot with 3 custom colors
colors2 <- c("#FF99FF", "#0066FF", "#00FF4D")
barplot(temp, col = colors2, main = "With 3 colors")
Color Cycling in R Programming
Color Cycling in R Programming

Using Color Palette

R programming offers 5 built in color palettes which can be used to quickly generate color vectors of desired length.

They are: rainbow(), heat.colors(), terrain.colors(), topo.colors() and cm.colors(). We pass in the number of colors that we want.

# generate a sequence of colors using the rainbow() function
result <- rainbow(5)


[1] "#FF0000FF" "#CCFF00FF" "#00FF66FF" "#0066FFFF" "#CC00FFFF"

Notice above that the hexadecimal numbers are 8 digits long. The last two digits are the transparency level with FF being opaque and 00 being fully transparent.

barplot(temp, col=rainbow(5), main="rainbow")
barplot(temp, col=heat.colors(5), main="heat.colors")
barplot(temp, col=terrain.colors(5), main="terrain.colors")
barplot(temp, col=topo.colors(5), main="topo.colors")
Demonstration of color palette in R programming
Demonstration of color palette in R programming

For more info, visit R Color Palettes

You can try out cm.colors() for yourself.

Did you find this article helpful?