theme_schola: A Schola Empirica ggplot2 theme

View source: R/theme.R

theme_scholaR Documentation

A Schola Empirica ggplot2 theme


A wrapper around theme() which provides several shortcuts to setting common options and several defaults. See more in Details.


  gridlines = c("y", "x", "both", "scatter"),
  base_size = 11,
  family = "Ubuntu Condensed",
  title_family = "Ubuntu",
  margins = TRUE,
  plot.title.position = "plot",
  axis_titles = TRUE,
  multiplot = FALSE,



Whether to display major gridlines along "y" (the default), "x", "both" or draw a "scatter", which has both gridlines and inverted colours.


Numeric text size in pts, affects all text in plot. Defaults to 11.

family, title_family

font family to use for the (title of the) plot. Defaults to "Ubuntu" for title and "Ubuntu Condensed" for plot.


logical, whether to draw margins around the plot or not (the default).


where to align the title. Either "plot" (the default, difference from theme() default) or "panel".


logical, draw axis titles? Defaults to TRUE.


if set to TRUE, provides better styling for small multiples created using ⁠facet_*⁠.


Arguments passed on to ggplot2::theme


all line elements (element_line())


all rectangular elements (element_rect())


all title elements: plot, axes, legends (element_text(); inherits from text)


aspect ratio of the panel


tick labels along axes (element_text()). Specify all axis tick labels (axis.text), tick labels by plane (using axis.text.x or axis.text.y), or individually for each axis (using axis.text.x.bottom,, axis.text.y.left, axis.text.y.right). ⁠axis.text.*.*⁠ inherits from ⁠axis.text.*⁠ which inherits from axis.text, which in turn inherits from text


tick marks along axes (element_line()). Specify all tick marks (axis.ticks), ticks by plane (using axis.ticks.x or axis.ticks.y), or individually for each axis (using axis.ticks.x.bottom,, axis.ticks.y.left, axis.ticks.y.right). ⁠axis.ticks.*.*⁠ inherits from ⁠axis.ticks.*⁠ which inherits from axis.ticks, which in turn inherits from line


length of tick marks (unit)


lines along axes (element_line()). Specify lines along all axes (axis.line), lines for each plane (using axis.line.x or axis.line.y), or individually for each axis (using axis.line.x.bottom,, axis.line.y.left, axis.line.y.right). ⁠axis.line.*.*⁠ inherits from ⁠axis.line.*⁠ which inherits from axis.line, which in turn inherits from line


background of legend (element_rect(); inherits from rect)


the margin around each legend (margin())


the spacing between legends (unit). legend.spacing.x & legend.spacing.y inherit from legend.spacing or can be specified separately


background underneath legend keys (element_rect(); inherits from rect)


size of legend keys (unit); key background height & width inherit from legend.key.size or can be specified separately


legend item labels (element_text(); inherits from text)


alignment of legend labels (number from 0 (left) to 1 (right))


title of legend (element_text(); inherits from title)


alignment of legend title (number from 0 (left) to 1 (right))


the position of legends ("none", "left", "right", "bottom", "top", or two-element numeric vector)


layout of items in legends ("horizontal" or "vertical")


anchor point for positioning legend inside plot ("center" or two-element numeric vector) or the justification according to the plot area when positioned outside the plot

arrangement of multiple legends ("horizontal" or "vertical")

justification of each legend within the overall bounding box, when there are multiple legends ("top", "bottom", "left", or "right")

margins around the full legend area, as specified using margin()

background of legend area (element_rect(); inherits from rect)

The spacing between the plotting area and the legend box (unit)


border around plotting area, drawn on top of plot so that it covers tick marks and grid lines. This should be used with fill = NA (element_rect(); inherits from rect)


spacing between facet panels (unit). panel.spacing.x & panel.spacing.y inherit from panel.spacing or can be specified separately.


option to place the panel (background, gridlines) over the data layers (logical). Usually used with a transparent or blank panel.background.


background of the entire plot (element_rect(); inherits from rect)


Alignment of the plot title/subtitle and caption. The setting for plot.title.position applies to both the title and the subtitle. A value of "panel" (the default) means that titles and/or caption are aligned to the plot panels. A value of "plot" means that titles and/or caption are aligned to the entire plot (minus any space for margins and plot tag).


plot subtitle (text appearance) (element_text(); inherits from title) left-aligned by default


caption below the plot (text appearance) (element_text(); inherits from title) right-aligned by default


upper-left label to identify a plot (text appearance) (element_text(); inherits from title) left-aligned by default


The position of the tag as a string ("topleft", "top", "topright", "left", "right", "bottomleft", "bottom", "bottomright) or a coordinate. If a string, extra space will be added to accommodate the tag.


should strip background edges and strip labels be clipped to the extend of the strip background? Options are "on" to clip, "off" to disable clipping or "inherit" (default) to take the clipping setting from the parent viewport.


placement of strip with respect to axes, either "inside" or "outside". Only important when axes and strips are on the same side of the plot.


facet labels (element_text(); inherits from text). Horizontal facet labels (strip.text.x) & vertical facet labels (strip.text.y) inherit from strip.text or can be specified separately. Facet strips have dedicated position-dependent theme elements (, strip.text.x.bottom, strip.text.y.left, strip.text.y.right) that inherit from strip.text.x and strip.text.y, respectively. As a consequence, some theme stylings need to be applied to the position-dependent elements rather than to the parent elements


space between strips and axes when strips are switched (unit)


space between strips and axes when strips are switched (unit)


set this to TRUE if this is a complete theme, such as the one returned by theme_grey(). Complete themes behave differently when added to a ggplot object. Also, when setting complete = TRUE all elements will be set to inherit from blank elements.


TRUE to run validate_element(), FALSE to bypass checks.


In particular, the theme: - displays only major gridlines, allowing you to quickly switch which ones; gridlines are thinner, panel has white background

  • provides quick option to draw a scatter with grey background - switches defaults for title alignment - turns axis labels off by default: in practice, x axes are often obvious and y axes are better documented in a subtitle - sets backgrounds to a schola-style shade - sets plot title in bold and 120% of base_size

All the changed defaults can be overriden by another call to theme().

See "Making charts" vignette for more complex examples: vignette('charts', package = 'reschola').


a ggtheme object


The default fonts - Ubuntu and Ubuntu Condensed - are contained in this package and can be registered with the system using register_reschola_fonts(). You should then install them onto your system like any font, using files in the directories described in the register_reschola_fonts() messsage.

See Also

Other Making charts: flush_axis, plot_lollipop(), prepare_lollipop_data(), schola_barplot()



# NOTE when `theme_schola()` is used in these examples, fonts
# are set to 'sans' to pass checks on computers without the
# Ubuntu included. If you have these fonts (see Note) you can
# leave these parameters at their default values.


# the basic plot for illustration, theme not used

p <- ggplot(mpg) +
  geom_bar(aes(y = class)) +
  labs(title = "Lots of cars", subtitle = "Count of numbers")

# using `theme_schola()` defaults

p +
  theme_schola("x", family = "sans", title_family = "sans")

# in combination with `flush_axis`:

p +
  theme_schola("x", family = "sans", title_family = "sans") +
  scale_x_continuous(expand = flush_axis)

# scatter

ggplot(mpg) +
  geom_point(aes(cty, hwy)) +
  theme_schola("scatter", family = "sans", title_family = "sans") +
  labs(title = "Lots of cars", subtitle = "Point by point")

# Smaller text, flush alignment

ggplot(mpg) +
  geom_point(aes(cty, hwy)) +
    base_size = 9, family = "sans", title_family = "sans"
  ) +
  labs(title = "Lots of cars", subtitle = "Point by point")

# Override defaults changed inside `theme_schola()`

ggplot(mpg) +
  geom_point(aes(cty, hwy)) +
    base_size = 9, family = "sans", title_family = "sans"
  ) +
  labs(title = "Lots of cars", subtitle = "Point by point") +
  theme(panel.background = element_rect(fill = "lightpink"))

scholaempirica/reschola documentation built on June 1, 2024, 1:29 p.m.