Skip to content
R for the Rest of Us: A Statistics-Free Introduction comes out June 25th. Or you can read the online version today. Check it out →
R for the Rest of Us Logo

Setting color and fill Scales

This lesson is locked

Get access to all lessons in this course.

If the video is not playing correctly, you can watch it in a new window

Transcript

Click on the transcript to go to that point in the video. Please note that transcripts are auto generated and may contain minor inaccuracies.

View code shown in video
# Load Packages -----------------------------------------------------------

library(tidyverse)

# Import Data -------------------------------------------------------------

penguins <- read_csv("penguins.csv")
			
# Setting color and fill Scales -------------------------------------------

# We can change the color or fill scale using a scale function.

# The function scale_color_manual() allows us to manually specify colors to use.

ggplot(data = penguins,
       mapping = aes(x = bill_length_mm,
                     y = bill_depth_mm,
                     color = island)) +
  geom_point() +
  scale_color_manual(values = c("orange", "dodgerblue", "green"))

# We can also use built-in palettes. 

# The scale_color_viridis_d() function (the d means it works with discrete data)
# is a great way to get colorblind-friendly palettes.

ggplot(data = penguins,
       mapping = aes(x = bill_length_mm,
                     y = bill_depth_mm,
                     color = island)) +
  geom_point() +
  scale_color_viridis_d()

# The scale_color_viridis_d() function also has several built-in palettes.
# You can use them as follows.

ggplot(data = penguins,
       mapping = aes(x = bill_length_mm,
                     y = bill_depth_mm,
                     color = island)) +
  geom_point() +
  scale_color_viridis_d(option = "A")

ggplot(data = penguins,
       mapping = aes(x = bill_length_mm,
                     y = bill_depth_mm,
                     color = island)) +
  geom_point() +
  scale_color_viridis_d(option = "H")

# There are many other built-in palettes. Just type scale_color_ and RStudio
# will autocomplete some other options for you.

# We can use scale_fill_viridis_d() for the fill aesthetic property.

ggplot(data = penguin_bill_length_by_island,
       mapping = aes(x = island,
                     y = mean_bill_length,
                     fill = island)) +
  geom_col() +
  scale_fill_viridis_d()

Your Turn

# Load Packages -----------------------------------------------------------

library(tidyverse)

# Import Data -------------------------------------------------------------

penguins <- read_csv("penguins.csv")
			
# Setting color and fill Scales -------------------------------------------

# Take your scatterplot that you just made and add a scale using scale_color_manual(). 
# You can find a list of all colors you can use here:
# https://www.datanovia.com/en/blog/awesome-list-of-657-r-color-names/

# YOUR CODE HERE

# Now update the last bar chart you made by manually specifying colors of the bars

# YOUR CODE HERE

# Update your bar chart using the scale_fill_viridis_d() function instead of
# scale_fill_manual()

# YOUR CODE HERE

Learn More

The PDF shown in the video has gone missing, but you can see a list of all named colors here.

There are a lot of other packages that give you color/fill palettes you can work with. See especially the paleteer package, which is a meta palette package, give you access to palettes from many other packages.

Have any questions? Put them below and we will help you out!

You need to be signed-in to comment on this post. Login.

Shadi Mahmoodi

Shadi Mahmoodi

October 13, 2023

Hi David, the link to the pdf is no longer working. Would you please post an updated one? thx

Dalton Bailey

Dalton Bailey

March 27, 2024

Is there a way to save a custom color palette in RStudio? Say I want to use my company's branded colors, but don't want to have to type in the hex code each time.

David Keyes

David Keyes Founder

March 27, 2024

Yes, absolutely!

I recorded a video to show you how this works. I showed you a simple way to do this plus a more complicated way using custom functions.

You can find the code that I use in the video here.

Let me know if this helps!

Dalton Bailey

Dalton Bailey

March 27, 2024

This is a perfect answer to what I was wondering. I was not looking forward to typing in hex codes each time I wanted to make some branded visuals. Thanks so much!

David Keyes

David Keyes Founder

March 27, 2024

Glad it was helpful! And, at the risk of overwhelming you, I'll mention that, if you want to go to the next level, you can create a custom package that has these custom functions. That way, you load your package and then have access to your custom functions.

We regularly do this for clients. See, for example, the omni package. This is obviously way more advanced than what I demonstrated, but I thought you might enjoy seeing what's possible.