I am soon moving away from the most beautiful place I will ever live, so I did what any nostalgic nature kid / data science nerd would do and immortalized it in an R color palette package. Now I (and you!) can have the colors of Washington State and the Pacific Northwest live on in our presentation figures forever.
All photos were taken by me in places that I love. The Pantone
Studio iPhone app helped me extract colors, and Chroma.js
Color Palette Helper helped me adjust values to ensure that all
palettes are color-blind safe to be used for attractive and inclusive
data viz. Structure of the code was inspired by the wesanderson
and LaCroixColoR
packages from GitHub. See
more examples on twitter.
install.packages("devtools")
::install_github("jakelawlor/PNWColors") devtools
library(PNWColors)
names(pnw_palettes)
1] "Starfish" "Shuksan" "Bay" "Winter" "Lake" "Sunset" "Shuksan2"
[8] "Cascades" "Sailboat" "Moth" "Spring" "Mushroom" "Sunset2" "Anemone" [
Use the pnw_palette()
function to build and view
palettes. Inputs are ‘name’, ‘n’, and ‘type’ (continuous or discrete).
‘Name’ is required. If ‘n’ is blank, function will assume n is equal to
the number of colors in the palette (5-8), but if n > palette length,
it will automatically interpolate colors between. If ‘type’ is missing,
the function will assume “discrete” if n < palette length, and
“continuous” if n > palette length.
pnw_palette(name="Starfish",n=7,type="discrete")
pnw_palette("Winter",100)
pnw_palette("Bay",8,type="continuous")
pnw_palette("Moth",12)
Palettes can be easily integrated into Base R imaging or
ggplot2
.
<- pnw_palette("Shuksan",100)
pal image(volcano, col = pal)
=pnw_palette("Lake",5, type = "discrete")
palggplot(diamonds, aes(carat, fill = cut)) +
geom_density(position = "stack") +
scale_fill_manual(values=pal) +
theme_classic()
=pnw_palette("Shuksan2",100)
palggplot(data.frame(x = rnorm(1e4), y = rnorm(1e4)), aes(x = x, y = y)) +
geom_hex() +
coord_fixed() +
scale_fill_gradientn(colours = pal) +
theme_classic()
# Or, to switch the order, use rev(), see below
scale_fill_gradientn(colours = rev(pal))
ggplot(data = iris,aes(x=Petal.Length,y=Petal.Width,color=Species))+
geom_point(size=2)+
scale_color_manual(values=pnw_palette("Spring",3))+
theme_classic()
<- pnw_palette("Anemone",3)
pal $dose <- as.factor(ToothGrowth$dose)
ToothGrowthggplot(ToothGrowth, aes(x=dose, y=len, fill=dose)) +
geom_violin(trim=FALSE)+
geom_boxplot(width=0.1, fill="white")+
labs(title="Plot of length by dose",x="Dose (mg)", y = "Length")+
scale_fill_manual(values=pal)+
theme_classic()
library(tidyverse)
library(urbnmapr)
<- pnw_palette("Winter",100)
pal %>%
countydata left_join(counties, by = "county_fips") %>%
filter(state_name =="Washington") %>%
ggplot(mapping=aes(long,lat,group = group, fill = horate)) +
geom_polygon(color="black",size=.25) +
scale_fill_gradientn(colours = pal) +
coord_map(projection="albers",lat0=39,lat1=45) +
theme(legend.title = element_text(),
legend.key.width = unit(.5,"in")) +
labs(fill="Homeownership rate") +
theme_void()
Used the palettes in your paper and care to share? (please do!)
Love the palettes and want
to share?
Reach me at
jake.lawlor@mail.mcgill.ca
or @Jake_Lawlor1