#' Make the Civilytics plot theme #' #' @param font_size default 14, a number representing the base font for the theme #' @param font_family default "", a character for the font family to use in the theme #' @param line_size default 0.5, the line size to use for the theme #' @param rel_small default 12/14, the scale factor to create a small font from the base font_size #' @param rel_tiny default 11/14, the scale factor to create a tiny font from the base font_size #' @param rel_large default 16/14, the scale factor to create a large font from the base font_size #' @return a ggplot2 theme object suitable for combining with ggplot objects to theme them #' @export theme_civilytics <- function (font_size = 14, font_family = "", line_size = 0.5, rel_small = 12 / 14, rel_tiny = 11 / 14, rel_large = 16 / 14) { half_line <- font_size / 2 small_size <- rel_small * font_size theme_grey(base_size = font_size, base_family = font_family) %+replace% theme( line = element_line( color = "black", linewidth = line_size, linetype = 1, lineend = "butt" ), rect = element_rect( fill = NA, color = NA, linewidth = line_size, linetype = 1 ), text = element_text( family = font_family, face = "plain", color = "black", size = font_size, hjust = 0.5, vjust = 0.5, angle = 0, lineheight = 0.9, margin = margin(), debug = FALSE ), axis.line = element_line( color = "black", linewidth = line_size, lineend = "square" ), axis.line.x = NULL, axis.line.y = NULL, axis.text = element_text(color = "black", size = small_size), axis.text.x = element_text(margin = margin(t = small_size / 4), vjust = 1), axis.text.x.top = element_text(margin = margin(b = small_size / 4), vjust = 0), axis.text.y = element_text(margin = margin(r = small_size / 4), hjust = 1), axis.text.y.right = element_text(margin = margin(l = small_size / 4), hjust = 0), axis.ticks = element_line(color = "black", linewidth = line_size), axis.ticks.length = unit(half_line / 2, "pt"), axis.title.x = element_text(margin = margin(t = half_line / 2), vjust = 1), axis.title.x.top = element_text(margin = margin(b = half_line / 2), vjust = 0), axis.title.y = element_text( angle = 90, margin = margin(r = half_line / 2), vjust = 1 ), axis.title.y.right = element_text( angle = -90, margin = margin(l = half_line / 2), vjust = 0 ), legend.background = element_blank(), legend.spacing = unit(font_size, "pt"), legend.spacing.x = NULL, legend.spacing.y = NULL, legend.margin = margin(0, 0, 0, 0), legend.key = element_blank(), legend.key.size = unit(1.1 * font_size, "pt"), legend.key.height = NULL, legend.key.width = NULL, legend.text = element_text(size = rel(rel_small)), legend.title = element_text(hjust = 0), legend.position = "right", legend.direction = NULL, legend.justification = c("left", "center"), legend.box = NULL, legend.box.margin = margin(0, 0, 0, 0), legend.box.background = element_blank(), legend.box.spacing = unit(font_size, "pt"), panel.background = element_blank(), panel.border = element_blank(), panel.grid = element_blank(), panel.grid.major = NULL, panel.grid.minor = NULL, panel.grid.major.x = NULL, panel.grid.major.y = NULL, panel.grid.minor.x = NULL, panel.grid.minor.y = NULL, panel.spacing = unit(half_line, "pt"), panel.spacing.x = NULL, panel.spacing.y = NULL, panel.ontop = FALSE, strip.background = element_rect(fill = "grey80"), strip.text = element_text( size = rel(rel_small), margin = margin(half_line / 2, half_line / 2, half_line / 2, half_line / 2) ), strip.text.x = NULL, strip.text.y = element_text(angle = -90), strip.placement = "inside", strip.placement.x = NULL, strip.placement.y = NULL, strip.switch.pad.grid = unit(half_line / 2, "pt"), strip.switch.pad.wrap = unit(half_line / 2, "pt"), plot.background = element_blank(), plot.title = element_text( face = "bold", size = rel(rel_large), hjust = 0, vjust = 1, margin = margin(b = half_line) ), plot.subtitle = element_text( size = rel(rel_small), hjust = 0, vjust = 1, margin = margin(b = half_line) ), plot.caption = element_text( size = rel(rel_tiny), hjust = 0, # set hjust to 0 vjust = 1, lineheight = 1, margin = margin(t = half_line) ), plot.tag = element_text( face = "bold", hjust = 0, vjust = 0.7 ), plot.tag.position = c(0, 1), plot.margin = margin(half_line, half_line, half_line, half_line), complete = TRUE ) }