library(warwickplots)
#> Loading required package: palettes
Note: In the version of this vignette available within R, the plots do not look good. Please read the vignette online instead.
Below are several example plots, made with ggplot2 demonstrating the usage
of the various palettes in warwick_palettes
and
theme_warwick()
.
First, let’s define a starting plot:
p <- ggplot(penguins, aes(flipper_length_mm, body_mass_g, group = species)) +
geom_point(aes(colour = species, shape = species), alpha = 0.8, size = 2) +
labs(title = "Penguin Size, Palmer Station LTER",
caption = "Visualization: Ella Kaye",
x = "flipper length (mm)",
y = "body mass (g)") +
theme_warwick()
p
Using colour and fill scales
Discrete
Use scale_colour_palette_d()
and
scale_fill_palette_d()
for discrete scales:
p +
scale_colour_palette_d(warwick_palettes$primary)
p +
scale_colour_palette_d(warwick_palettes$primary[c(1, 3, 5)])
mpg |>
filter(class != "2seater") |>
ggplot(aes(y = fl, fill = class)) +
geom_bar() +
scale_fill_palette_d(warwick_palettes$primary) +
theme_warwick()
Sequential
ggplot(diamonds[sample(nrow(diamonds), 1000), ], aes(carat, price)) +
geom_point(aes(colour = clarity)) +
scale_colour_palette_d(warwick_palettes$aubergine)
Use scale_colour_palette_c()
and
scale_fill_palette_c()
for continuous scales and
scale_colour_palette_b()
and
scale_fill_palette_b()
for binned scales:
eruptions <- ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_tile()
eruptions +
scale_fill_palette_c(warwick_palettes$ruby)
eruptions +
scale_fill_palette_b(warwick_palettes$teal)
Divergent
To demonstrate the divergent palettes, let’s first generate some synthetic data to plot on a map:
library(maps)
# Get US state boundaries
us_states <- map_data("state")
# Generate synthetic data
set.seed(123)
states <- unique(us_states$region)
n <- length(states)
data <- data.frame(
region = states,
value = rnorm(n, mean = .5)
)
# Merge the synthetic data with the map data
us_states <- us_states |>
left_join(data, by = "region")
# Create the plot (without colour)
map_p <- ggplot(us_states, aes(x = long, y = lat, group = group, fill = value)) +
geom_polygon(color = "white") +
labs(title = "Divergent Data by US State") +
theme_warwick()
We can now add a divergent colour palette:
map_p +
scale_fill_palette_c(warwick_palettes$aubergine_ruby)
By default, the fill scale’s mid-point is the mean of the groups. If
we want it to be zero, we can use the rescaler argument in
ggplot2::continuous_scale()
, which accepts a function used
to scale the input values to the range [0, 1], to scale the fill values
to have a mid-point of zero. For scaling the mid-point use
scales::rescale_mid()
:
map_p +
scale_fill_palette_c(warwick_palettes$aubergine_ruby,
rescaler = ~ scales::rescale_mid(.x, mid = 0))
See the using palettes with ggplot2 vignette in the palettes package for more details.
More on theme_warwick()
Let’s return to some earlier examples to see how to get the most out
of theme_warwick()
.
theme_warwick()
makes use of
ggtext::element_textbox_simple()
for the plot title and
subtitle. This allows us to make use of markdown and CSS styles in the
text, and also enables text-wrapping:
new_p <- p +
labs(subtitle = "Flipper length and body mass for **<span style = 'color:#3C1053;'>Adelie</span>**, **<span style = 'color:#6DCDB8;'>Chinstrap</span>** and **<span style = 'color:#CB333B;'>Gentoo</span>** Penguins. This is based on data made available in the **palmerpenguins** R package.") +
scale_color_palette_d(warwick_palettes$primary)
new_p
We can now use theme()
to make further adjustments to
the appearance of the plot. Now that we have colour for the different
species in the subtitle, we no longer need the legend. Let’s also alter
some of the text. Note that because the title is set in
theme_warwick()
as a
ggtext::element_textbox_simple()
, you need to use that in
the subsequent call to theme, whereas to change the appearance of other
text, e.g. the caption, you just need the standard
ggplot2::element_text()
:
new_p +
theme(legend.position = "none",
plot.title = ggtext::element_textbox_simple(size = rel(1.6)),
plot.caption = element_text(colour = "#CB333B"))
Note that the title and subtitle now have less space between them.
This is because, in theme_warwick()
the spacing is defined
in the definition of plot.title
and that has now been
overwritten, so we need to put it back. We can inspect the source code
by calling theme_warwick
in the console (without the
parentheses), or with View(theme_warwick)
. We can then see
the whole definition of plot.title
and put the definition
of margin
back in (the text colour can stay as is):
new_p +
theme(legend.position = "none",
plot.title = element_textbox_simple(size = rel(1.6),
margin = margin(12, 0, 6, 0)),
plot.caption = element_text(colour = "#CB333B"))
Typography and setting up custom fonts
The University of Warwick’s typography
brand guidance is to use the font Lato for all online text and the
font Avenir Next for all print material. theme_warwick()
has a use
argument, that can be one of
"online"
or "print"
(defaults to
"online"
), which will ensure the appropriate font for the
use, if your system is set up for it, i.e. you have the fonts
installed and the packages to render them in a plot. For details on how
to ensure that your system is properly set up for this, see the get
started with warwickplots vignette.