Four years spent in the most beautiful place in the world, immortalized in an R color palette package. May the colors of Washington State and the Pacific Northwest live on in our presentation figures forever.
Palettes are pulled from photos I took in some of the dreamiest, most colorful, PNW-iest places I know. 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. See more examples on twitter.
Installation
Palettes
Functions
Examples
As Seen In
Contact
# from CRAN
install.packages("PNWColors")
# or dev version:
install.packages("devtools")
devtools::install_github("jakelawlor/PNWColors")
library(PNWColors)
names(pnw_palettes)
[1] "Starfish" "Shuksan" "Bay" "Winter" "Lake" "Sunset" "Shuksan2"
[8] "Cascades" "Sailboat" "Moth" "Spring" "Mushroom" "Sunset2" "Anemone"
- Low Tide -- San Juan Islands, Washington
- Mount Shuksan from Mount Baker Ski Resort -- North Cascades, Washington
- A nice night for a late-summer sunset paddle -- Bellingham Bay, Washington
- Seattle Snowpocalypse 2019 -- Anacortes, Washington
- Best after-work sun spot West of the Mississippi -- Whistle Lake, Anacortes, Washington
- Washington Park sunset -- Anacortes, Washington
- Mount Shuksan, golden hour -- North Cascades, Washington
- Watson Lake Trail End -- North Cascades, Washington
- The most beautiful moth -- Vendovi Island, Washington
- S/V Funky Dory, the maiden voyage -- Anacortes, Washington
- Oyster Dome Sunset -- Chuckanut, Washington
- Cherry Blossom Season -- Anacortes, Washington
- Fieldtrip -- Anacortes, Washington
- Life on a log -- Orcas Island, Washington
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
.
pal <- pnw_palette("Shuksan",100)
image(volcano, col = pal)
pal=pnw_palette("Lake",5, type = "discrete")
ggplot(diamonds, aes(carat, fill = cut)) +
geom_density(position = "stack") +
scale_fill_manual(values=pal) +
theme_classic()
pal=pnw_palette("Shuksan2",100)
ggplot(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))
library(palmerpenguins)
ggplot(data = penguins,
aes(x = flipper_length_mm,
y = body_mass_g)) +
geom_point(aes(color = species,
shape = species),
size = 3) +
scale_color_manual(values = pnw_palette("Bay",3)) +
labs(title = "Penguin size, Palmer Station LTER",
subtitle = "Flipper length and body mass for Adelie, Chinstrap and Gentoo Penguins",
x = "Flipper length (mm)",
y = "Body mass (g)",
color = "Penguin species",
shape = "Penguin species") +
theme_classic()
pal <- pnw_palette("Anemone",3)
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
ggplot(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)
pal <- pnw_palette("Winter",100)
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()
Have you used PNWColors
in something? Please share to grow the list!
Lawlor and Arellano 2020, Scientific Reports, Bay palette
Patel et al. 2020, Biogeochemistry, Sailboat palette
Nicholas et al. 2020, Journal of Physical Chemistry C, Sunset2 palette
Sobocinski, K.L. (2021). Salish Sea Institute, Starfish palette
Linardich et al. (2021). Global Change Biology, Bay palette
Green et al. (2022). Proceedings B., Bay palette
Reach me at jake.lawlor@mail.mcgill.ca or @Jake_Lawlor1
For Citation Information, see here:
Jake Lawlor (2020). PNWColors: Color Palettes Inspired by Nature in the US Pacific Northwest. R package version 0.1.0. https://CRAN.R-project.org/package=PNWColors