Make the most of R colors and palettes

There are a ton of constructed-in shades and prepared-manufactured palettes for R consumers — if you know how to obtain and use them. Below are some of my favorite tips and resources for doing the job with shades in R.

How to obtain constructed-in R shades

There are additional than 650 shades constructed correct into base R. These enable you use coloration names in its place of hex or RGB codes. The coloration() purpose lists all of the coloration names, but that doesn’t assistance you see them.

There are web-sites and PDFs where by you can look at all the shades and what they glance like. But why not use your individual searchable desk in R?

I constructed a deal to do just that, which you are welcome to download from GitHub working with put in_github() from the remotes or devtools deals:

remotes::put in_github("smach/rcolorutils", build_vignettes = Legitimate)

(Adding build_vignettes = Legitimate as an argument to put in_github() installs the deal vignette, as well.)

Load the deal as typical and then operate generate_coloration_desk() to exhibit a sortable, lookup desk of shades in R:

generate_coloration_desk(web page_length = ten)

The generate_coloration_desk() purpose has one optional argument, web page_length, which defaults to twenty five.

Table of built-in R colors with names, color swatch, hex codes, and rgb values. Sharon Machlis, IDG

The generate_coloration_desk() purpose generates a desk of constructed-in R shades.

Though you can lookup by coloration names this kind of as “blue,” not all blue-ish shades have “blue” in their names. Which is why I involved columns for RGB pink, environmentally friendly, and blue values, so you can type and filter by those people as well. At minimum your shades may possibly finish up in a additional sensible get than alphabetically by their names. To type on additional than one column at a time, keep down the change essential when clicking column names.

Table of built-in R colors with names, color swatch, hex codes, and rgb values, searching for gr.y. Sharon Machlis, IDG

Seeking for gr.y in the rcolorutils package’s coloration desk.

The desk lets you to lookup with regular expressions. For case in point, you can lookup for gray or grey by working with a dot for “any letter” and browsing for gr.y in the desk. If you do that, you will see that some shades are recurring with gray and gray in their names. So, even though there are 657 coloration entries in R’s constructed-in shades, there are not essentially 657 unique shades. 

How to lookup for ‘R shades like this one’

There is also a way to lookup for “colors considerably like this precise color” with no a desk. I identified this when jogging the base R coloration demo, which you can operate regionally with demo(shades).

The demo to start with shows some shows of constructed-in shades. I didn’t obtain those people quite valuable considering the fact that the colored textual content wasn’t as well helpful for evaluating shades.  

List of built-in R colors, text of color names using the actual color Sharon Machlis, IDG

Exhibit of constructed-in shades when working with demo(shades).

But if you cycle by way of those people colored textual content shows, you will get there at an solution that states

## Now, consider selecting a coloration by seeking in the
## community of one you know :
plotCol(nearRcolor("deepskyblue", "rgb", dist=50))

and a exhibit this kind of as beneath. Which is valuable!

Image of 5 different color blues: deepskyblue, deepskyblue2, turquoise2, darkturquoise, and cyan2. Sharon Machlis, IDG

Blues related to “deepskyblue.”

You could argue about just how blue these shades are compared with other selections, but it’s a commence. Detect, as well, that some have names like “cyan” and “turquoise,” which indicates you simply cannot obtain those people in the desk only by seeking for “blue.”

If you study the code that produced the higher than image of five blue shades, you will see that there were being two functions associated: nearRcolor() and plotCol(). I was not equipped to access possibly of those people functions in base R with no jogging the shades demo. Considering the fact that I’d like those people functions with no having to operate the demo each and every time, I included code for both of them to my new rcolorsutils deal.

If you operate nearRcolor() on an R coloration title, you get a named vector with coloration info. You can then plot those people shades with plotCol() — together with placing the selection of rows to exhibit so all the shades never show up in a solitary row.

      .0000       .0281       .0374       .0403       .0589       .0643
    "tomato"    "sienna1"     "brown1"      "coral"     "coral1"       "tan1"
      .0667       .0723       .0776       .0882       .0918       .0937
   "tomato2"    "sienna2"     "brown2"     "coral2"       "tan2" "firebrick1"
plotCol(nearRcolor("tomato"), nrow = three)
3 x 4 grid of colors like 'tomato' Sharon Machlis, IDG

Plot with three rows of shades near to “tomato.”

If I glance for shades in close proximity to “blue” I never get as well several returned:

.0000 .0667
"blue" "blue2"

I can alter how several outcomes I get back by placing a custom rgb length. What length is very best to use? I just fiddle about with the length integer until finally I get about the selection of shades I’d like to see. For case in point, working with %>% pipe syntax and a length of 135:

nearRcolor("blue", "rgb", dist = 135)  %>%
plotCol(nrow = three)
3 x 3 grid of different shades of blue Sharon Machlis, IDG

Colors in close proximity to blue with a custom length.

The scales deal also has a great purpose for plotting shades, demonstrate_col(), which you can use in its place of plotCol():

nearRcolor("blue", "rgb", dist = 135) %>% 
3 x 3 grid of shades of blue, with some labels white but one label black. Sharon Machlis, IDG

The demonstrate_col() function’s outcomes for shades in close proximity to “blue.”

What’s great about demonstrate_col() is that it establishes no matter whether textual content coloration would glance greater as black or white, relying on the coloration currently being shown. 

How to obtain and use pre-manufactured R coloration palettes

There are a several coloration palettes constructed into base R, but possibly the most well-liked come from the RColorBrewer and viridis deals. You can put in both from CRAN.

If you also put in the tmaptools deal, you will get a excellent constructed-in application for discovering both RColorBrewer and viridis palettes by running palette_explorer().

The application allows you pick the selection of shades you want, and you can see all out there palettes within just that selection. The application contains sample code for creating the palettes, as you can see beneath each and every palette coloration team. And it even has a coloration blindness simulator at the bottom correct.

Shiny app showing palettes from RColorBrewer and viridis Sharon Machlis, IDG

The tmaptools package’s palette_explorer application.

These may well be all the palettes you will ever will need. But if you are seeking for additional wide range, there are other R deals with pre-manufactured palettes. There are palette deals impressed by Harry Potter, Video game of Thrones, Islamic artwork, U.S. countrywide parks, and a lot additional. It can be difficult to hold track of all of the out there R palette deals — so the  paletteer deal tries to do that for us. Paletteer contains additional than two,000 palettes from fifty nine deals and classifies them into three groups: discreet, constant, and dynamic.

I obtain it a little bit challenging to scan and examine that several palettes. So, I manufactured a Shiny application to see them by classification. 

You can download the code for this application if you’d like to operate it on your individual program:


Modify the file extension from .txt to .R, put in essential deals, and operate the application.R file in RStudio. Sharon Machlis


Screen shot showing Run App green triangle button within RStudio Sharon Machlis

Operate a Shiny application in RStudio by clicking the Operate Application environmentally friendly triangle

Modify the file title from application.txt to application.R, make sure you have mounted the  essential deals, and then operate the application in RStudio with the “run app” button.

The application allows you lookup for palettes by classification: constant, discreet, or dynamic. Then select the sort you want, i.e., shades that diverge, shades that are in sequence, or shades that are qualitative with no any type of get. These palette classifications come from the paletteer deal and a several of them may possibly not be specific, so I are inclined to glance at all three kinds to make sure I’m not missing anything I may possibly like.

Screen shot showing a color palette with R code underneath explaining how to use the palette. Sharon Machlis, IDG

Shiny application for displaying palettes involved in the paletteer deal.

Less than each and every coloration image is code for how to use the palette. The to start with line of code shows how to access the vector of hex codes in the palette the next one shows how to use it in ggplot with scale_fill_paletteer() or scale_coloration_paletteer() geoms. You can see how this will work in the movie embedded at the top of this report.

Make your individual R palette and palette purpose

In some cases you will want to make your individual coloration palette, possibly because you have merged your individual shades in a plan you like or because you will need to match your organization’s accredited shades.

You can use any coloration hex codes within just ggplot2::scale_fill_handbook(). Even so, it’s substantially additional classy to generate my individual scale_fill() purpose related to ggplot2’s constructed-in ones. The paletti deal would make it quite simple to do this.

Here’s how it will work. Very first operate the get_pal() purpose on your vector of shades to generate a palette from them. Then operate possibly get_scale_fill() or get_scale_coloration() on the outcomes to switch the palette into a ggplots purpose, this kind of as

my_shades <- c("#b7352d", "#2a6b8f", "#0f4461", "#26aef8")
scale_fill_my_palette <- get_pal(my_colors) %>%
# OR
col_fill_my_palette <- get_pal(my_colors) %>%

Now I can use my new scale_fill_my_palette() or col_fill_my_palette() purpose in a ggplot, as you can see with this plot of some toy info:

toy_info <- data.frame(
Classification=c("A","B","C","A", "C") ,
xval=variable(c("Mon", "Tue", "Wed", "Thur", "Fri"), degrees = c("Mon", "Tue", "Wed", "Thur", "Fri"), purchased = Legitimate) ,
yval=c(255,500,459,342, 386)
ggplot(toy_info, aes(x = xval, y = yval, fill = Classification)) +
geom_col() +
xlab("") +
ylab("") +
concept_traditional() +
Bar graph with dark red, dark blue, and light blue bars from a custom palette Sharon Machlis, IDG

Plot with custom palette.

Want additional R tips and tutorials? Head to my Do Extra With R page.

Copyright © 2021 IDG Communications, Inc.