A precise & pristine ggplot2 theme with opinionated defaults and an emphasis on typography

theme_ipsum(base_family = "Arial Narrow", base_size = 11,
  plot_title_family = base_family, plot_title_size = 18,
  plot_title_face = "bold", plot_title_margin = 10,
  subtitle_family = base_family, subtitle_size = 12,
  subtitle_face = "plain", subtitle_margin = 15,
  strip_text_family = base_family, strip_text_size = 12,
  strip_text_face = "plain", caption_family = base_family,
  caption_size = 9, caption_face = "italic", caption_margin = 10,
  axis_title_family = subtitle_family, axis_title_size = 9,
  axis_title_face = "plain", axis_title_just = "rt",
  plot_margin = margin(30, 30, 30, 30), grid = TRUE, axis = FALSE,
  ticks = FALSE)

Arguments

base_family, base_size
base font family and size
plot_title_family, plot_title_face, plot_title_size, plot_title_margin
plot title family, face, size and margi
subtitle_family, subtitle_face, subtitle_size
plot subtitle family, face and size
subtitle_margin
plot subtitle margin bottom (single numeric value)
strip_text_family, strip_text_face, strip_text_size
facet label font family, face and size
caption_family, caption_face, caption_size, caption_margin
plot caption family, face, size and margin
axis_title_family, axis_title_face, axis_title_size
axis title font family, face and size
axis_title_just
axis title font justification, one of [blmcrt]
plot_margin
plot margin (specify with ggplot2::margin)
grid
panel grid (TRUE, FALSE, or a combination of X, x, Y, y)
axis
add x or y axes? TRUE, FALSE, "xy"
ticks
ticks if TRUE add ticks

Why Arial Narrow?

First and foremost, Arial Narrow is generally installed by default or readily available on any modern system, so it's "free"-ish; plus, it is a condensed font with solid default kerning pairs and geometric numbers.

Building upon <code>theme_ipsum</code>

The function is setup in such a way that you can customize your own one by just wrapping the call and changing the parameters. See source for examples.

Gotchas

There are distinctions between font names and various devices. Names that work for display graphics devices and bitmap ones such as png may not work well for PostScript or PDF ones. You may need two versions of a font-based theme function for them to work in a particular situation. This situation usually only arises when using a newer font with many weights but somewhat irregular internal font name patterns.

Examples

## Not run: ------------------------------------ # library(ggplot2) # library(dplyr) # # # seminal scatterplot # ggplot(mtcars, aes(mpg, wt)) + # geom_point() + # labs(x="Fuel effiiency (mpg)", y="Weight (tons)", # title="Seminal ggplot2 scatterplot example", # subtitle="A plot that is only useful for demonstration purposes", # caption="Brought to you by the letter 'g'") + # theme_ipsum() # # # seminal bar chart # # update_geom_font_defaults() # # count(mpg, class) %>% # ggplot(aes(class, n)) + # geom_col() + # geom_text(aes(label=n), nudge_y=3) + # labs(x="Fuel efficiency (mpg)", y="Weight (tons)", # title="Seminal ggplot2 bar chart example", # subtitle="A plot that is only useful for demonstration purposes", # caption="Brought to you by the letter 'g'") + # theme_ipsum(grid="Y") + # theme(axis.text.y=element_blank()) ## ---------------------------------------------