R/create_theme_fun.R

Defines functions create_theme_fun

Documented in create_theme_fun

# WARNING - Generated by {fusen} from /dev/flat_ggplot_theme.Rmd: do not edit by hand

#' Create a theme functions by using the {ggplot2} elements extracted from the Figma file
#'
#' @param .data Tibble. {ggplot2} elements as created by \code{architekter::\link{extract_ggplot_theme}()}
#' 
#' @importFrom ggplot2 theme element_rect element_line element_text
#' @importFrom dplyr filter pull
#' @importFrom cli cli_alert_success
#'
#' @return A {ggplot2} theme function.
#' @export
#' @examples
#' data(toy_raw_file_content)
#' 
#' library(ggplot2)
#' 
#' my_theme <- toy_raw_file_content %>% 
#'   extract_ggplot_theme() %>% 
#'   create_theme_fun()
#' 
#' \dontrun{
#' ggplot(data = iris) + 
#'   aes(x = Sepal.Width, fill = Species) + 
#'   geom_density() + 
#'   labs(title = "Sepal width of several species of iris",
#'        subtitle = "This plot respects the graphic design system defined in Figma",
#'        x = "Sepal width",
#'        y = "Density", 
#'        color = "Species") +
#'   my_theme()
#' }
create_theme_fun <- function(.data) {
  
  ad_hoc_theme_fun <- function(...) {
    theme(
      panel.background = element_rect(
        size = .data %>% filter(element_name == "panel_background") %>% pull(size),
        color = .data %>% filter(element_name == "panel_background") %>% pull(color),
        fill = .data %>% filter(element_name == "panel_background") %>% pull(fill),
        linetype = .data %>% filter(element_name == "panel_background") %>% pull(linetype)
      ),
      panel.grid.major = element_line(
        size = .data %>% filter(element_name == "panel_grid") %>% pull(size) / 10,
        color = .data %>% filter(element_name == "panel_grid") %>% pull(color),
        linetype = .data %>% filter(element_name == "panel_grid") %>% pull(linetype)
      ),
      panel.grid.minor = element_line(
        size = .data %>% filter(element_name == "panel_grid") %>% pull(size) / 10,
        color = .data %>% filter(element_name == "panel_grid") %>% pull(color),
        linetype = .data %>% filter(element_name == "panel_grid") %>% pull(linetype)
      ),
      plot.title = element_text(
        lineheight = .data %>% filter(element_name == "plot_title") %>% pull(lineheight),
        family = .data %>% filter(element_name == "plot_title") %>% pull(family),
        size = .data %>% filter(element_name == "plot_title") %>% pull(size) / 1.5,
        color = .data %>% filter(element_name == "plot_title") %>% pull(color),
      ),
      plot.subtitle = element_text(
        lineheight = .data %>% filter(element_name == "plot_subtitle") %>% pull(lineheight),
        family = .data %>% filter(element_name == "plot_subtitle") %>% pull(family),
        size = .data %>% filter(element_name == "plot_subtitle") %>% pull(size) / 1.5,
        color = .data %>% filter(element_name == "plot_subtitle") %>% pull(color),
      ),
      legend.title = element_text(
        lineheight = .data %>% filter(element_name == "legend_title") %>% pull(lineheight),
        family = .data %>% filter(element_name == "legend_title") %>% pull(family),
        size = .data %>% filter(element_name == "legend_title") %>% pull(size) / 1.5,
        color = .data %>% filter(element_name == "legend_title") %>% pull(color),
      ),
      legend.text = element_text(
        lineheight = .data %>% filter(element_name == "legend_text") %>% pull(lineheight),
        family = .data %>% filter(element_name == "legend_text") %>% pull(family),
        size = .data %>% filter(element_name == "legend_text") %>% pull(size) / 1.5,
        color = .data %>% filter(element_name == "legend_text") %>% pull(color),
      ),
      axis.title = element_text(
        lineheight = .data %>% filter(element_name == "axis_title") %>% pull(lineheight),
        family = .data %>% filter(element_name == "axis_title") %>% pull(family),
        size = .data %>% filter(element_name == "axis_title") %>% pull(size) / 1.5,
        color = .data %>% filter(element_name == "axis_title") %>% pull(color),
      ),
      axis.text = element_text(
        lineheight = .data %>% filter(element_name == "axis_text") %>% pull(lineheight),
        family = .data %>% filter(element_name == "axis_text") %>% pull(family),
        size = .data %>% filter(element_name == "axis_text") %>% pull(size) / 1.5,
        color = .data %>% filter(element_name == "axis_text") %>% pull(color),
      ),
      ...
    )
  }
  
  cli_alert_success("The theme() function has been created.")
  
  return(ad_hoc_theme_fun)
}
ThinkR-open/swatch documentation built on April 7, 2022, 6:08 p.m.