From 0cb44ad1e6e2f472910ffa6ab7a57409de9e80dc Mon Sep 17 00:00:00 2001 From: Ernest Guevarra Date: Tue, 27 Feb 2024 00:17:55 +0000 Subject: [PATCH 1/4] create functions for creating palettes --- DESCRIPTION | 6 +- NAMESPACE | 11 + R/create_palette.R | 213 ++++++++++++++++++ R/get_named_colours.R | 25 +- R/ox_palettes.R | 40 ---- R/oxfordtheme.R | 11 +- R/utils.R | 16 ++ README.Rmd | 14 +- README.md | 17 +- man/create_palette.Rd | 46 ++++ man/get_oxford_colour.Rd | 11 +- man/{oxford_palettes.Rd => oxford_palette.Rd} | 2 +- man/oxfordtheme.Rd | 14 +- pkgdown/_pkgdown.yml | 7 + 14 files changed, 353 insertions(+), 80 deletions(-) create mode 100644 R/create_palette.R delete mode 100644 R/ox_palettes.R create mode 100644 man/create_palette.Rd rename man/{oxford_palettes.Rd => oxford_palette.Rd} (83%) diff --git a/DESCRIPTION b/DESCRIPTION index 106a634..28f6c7c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: oxfordtheme Type: Package -Title: Oxford Theme and Theme Components +Title: Oxford Palette, Theme, and Theme Components Version: 0.0.0.9000 Authors@R: person( given = "Ernest", @@ -9,8 +9,8 @@ Authors@R: person( email = "ernest@guevarra.io", role = c("aut", "cre") ) -Description: Theme and theme components based on University of Oxford's visual - identity guidelines +Description: Palette, theme, and theme components based on University of + Oxford's visual identity guidelines . License: GPL (>= 3) Depends: diff --git a/NAMESPACE b/NAMESPACE index a3d85ef..93e474f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,8 +1,19 @@ # Generated by roxygen2: do not edit by hand +S3method(print,palette) export(cmyk2rgb) +export(create_oxford_palette) +export(create_palette_divergent) +export(create_palette_qualitative) +export(create_palette_sequential) export(get_oxford_colour) export(get_oxford_colours) export(oxford_palettes) importFrom(grDevices,col2rgb) +importFrom(grDevices,colorRampPalette) +importFrom(grDevices,rgb) +importFrom(graphics,image) +importFrom(graphics,par) +importFrom(graphics,rect) +importFrom(graphics,text) importFrom(stringr,str_pad) diff --git a/R/create_palette.R b/R/create_palette.R new file mode 100644 index 0000000..da729b2 --- /dev/null +++ b/R/create_palette.R @@ -0,0 +1,213 @@ +#' +#' Complete list of Oxford colour palettes +#' +#' @examples +#' oxford_palettes() +#' +#' @rdname oxford_palette +#' @export +#' +oxford_palettes <- function() { + list( + blues = get_oxford_colours(pattern = c("sky blue", "cerulean", "royal blue")), + bugn = get_oxford_colours(pattern = c("sky blue", "aqua", "viridian")), + bupu = get_oxford_colours(pattern = c("sky blue", "royal blue", "plum")), + gnbu = get_oxford_colours(pattern = c("ocean grey", "aqua", "cerulean")), + greens = get_oxford_colours(pattern = c("sage", "lime", "Oxford green")), + greys = get_oxford_colours(pattern = c("shell", "umber", "ash")), + pubu = get_oxford_colours(pattern = c("lavender", "cerulean", "royal blue")), + pubugn = get_oxford_colours(pattern = c("lavender", "cerulean", "aqua")), + purd = get_oxford_colours(pattern = c("lavender", "plum", "red")), + rdpu = get_oxford_colours(pattern = c("potters pink", "Oxford pink", "plum")), + reds = get_oxford_colours(pattern = c("potters", "coral", "red")), + ylgn = get_oxford_colours(pattern = c("lemon", "lime", "Oxford green")), + ylgnbu = get_oxford_colours(pattern = c("lemon", "aqua", "royal blue")), + ylorbr = get_oxford_colours(pattern = c("lemon", "orange", "sienna")), + ylorrd = get_oxford_colours(pattern = c("lemon", "orange", "red")), + brbg = get_oxford_colours(pattern = c("sienna", "cool grey", "Oxford green")), + piylgn = get_oxford_colours(pattern = c("Oxford pink", "cool grey", "Oxford green")), + prgn = get_oxford_colours(pattern = c("plum", "cool grey", "Oxford green")), + puor = get_oxford_colours(pattern = c("orange", "cool grey", "plum")), + rdbu = get_oxford_colours(pattern = c("red", "cool grey", "royal blue")), + rdgy = get_oxford_colours(pattern = c("red", "cool grey", "ash")), + rdylbu = get_oxford_colours(pattern = c("red", "lemon", "royal blue")), + rdylgn = get_oxford_colours(pattern = c("red", "lemon", "Oxford green")), + pastel = get_oxford_colours(pattern = c("mauve", "peach", "lilac", "ocean grey", "ochre", "sky", "sage")), + dark = get_oxford_colours(pattern = c("lemon", "lime", "cerulean", "pink", "orange", "plum", "sienna", "umber")), + heritage = get_oxford_colours(pattern = c("sienna", "peach", "dusk", "sage green", "Oxford green")), + contemporary = get_oxford_colours(pattern = c("coral", "potters pink", "cool grey", "ocean grey", "aqua")), + celebratory = get_oxford_colours(pattern = c("viridian", "mauve", "ochre", "lavender", "plum")), + corporate = get_oxford_colours(c("orange", "sky blue", "lime green", "cerulean", "royal blue")) + ) +} + + + +#' +#' Create palette based on Oxford palettes +#' +#' @param name Name of Oxford palette to use +#' @param n Number of colours desired/required. Oxford palettes have at least +#' 5 colours. All colour schemes are derived from the University of Oxford +#' [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines). +#' #If NULL (default), use all colours. +#' @param type A character value for type of palette to use. Can be either +#' sequential, divergent, or qualitative. +#' +#' @return A character vector of desired/required colours with length equivalent +#' to `n` +#' +#' @examples +#' create_palette_sequential("blues", 5) +#' create_palette_divergent("brbg", 10) +#' create_palette_qualitative("heritage", 5) +#' create_oxford_palette("blues", 5) +#' +#' @rdname create_palette +#' @export +#' + +create_palette_sequential <- function(name, n) { + ## Check if specified palette is sequential ---- + if ( + !name %in% c( + "blues", "bugn", "bupu", "gnbu", "greens", "greys", + "pubu", "pubugn", "purd", "rdpu", "reds", "ylgn", + "ylgnbu", "ylorbr", "ylorrd" + ) + ) stop ( + "Selected palette is not a sequential palette. Please verify and try again." + ) + + ## Check if number of colours is compatible with sequential ---- + if (n < 3) { + warning ("Sequential palettes have minimum 3 colours. Returning 3 colours.") + n <- 3 + } + + if (n > 9) { + warning ("Sequential palettes have maximum 9 colours. Returning 9 colours.") + n <- 9 + } + + ## Get base palette ---- + pal <- oxford_palettes()[[name]] + + ## Update palette to n ---- + pal <- grDevices::colorRampPalette(pal)(n) + + ## Return palette ---- + structure(pal, class = "palette", name = name) +} + + +#' +#' @rdname create_palette +#' @export +#' +create_palette_divergent <- function(name, n) { + ## Check if specified palette is divergent ---- + if ( + !name %in% + c("brbg", "piylgn", "prgn", "puor", "rdbu", "rdgy","rdylbu", "rdylgn") + ) stop ( + "Selected palette is not a divergent palette. Please verify and try again." + ) + + ## Check if number of colours is compatible with divergent ---- + if (n < 3) { + warning ("Divergent palettes have minimum 3 colours. Returning 3 colours.") + n <- 3 + } + + if (n > 9) { + warning ("Divergent palettes have maximum 11 colours. Returning 11 colours.") + n <- 9 + } + + ## Get base palette ---- + pal <- oxford_palettes()[[name]] + + ## Update palette to n ---- + pal <- grDevices::colorRampPalette(pal)(n) + + ## Return palette ---- + structure(pal, class = "palette", name = name) +} + +#' +#' @rdname create_palette +#' @export +#' +create_palette_qualitative <- function(name, n) { + ## Check if specified palette is qualitative ---- + if ( + !name %in% + c("pastel", "dark", "heritage", "contemporary", "celebratory", "corporate") + ) stop ( + "Selected palette is not a qualitative palette. Please verify and try again." + ) + + ## Check if number of colours is compatible with qualitative ---- + if ( + n > 5 & name %in% c("heritage", "contemporary", "celebratory", "corporate") + ) { + warning( + paste( + "The qualitative palette", name, "has maximum 5 colours. Returning 5 colours." + ) + ) + n <- 5 + } + + ## Check if number of colours is compatible with pastel ---- + if (n > 8 & name == "pastel") { + warning ( + paste( + "The qualitative palette", name, "has maximum 8 colours. Returning 8 colours." + ) + ) + n <- 8 + } + + ## Check if number of colours is compatible with dark ---- + if (n > 7 & name == "dark") { + warning ( + paste( + "The qualitative palette", name, "has maximum 7 colours. Returning 7 colours." + ) + ) + n <- 7 + } + + ## Get base palette ---- + pal <- oxford_palettes()[[name]] + + ## Update palette to n ---- + pal <- grDevices::colorRampPalette(pal)(n) + + ## Return palette ---- + structure(pal, class = "palette", name = name) +} + + +#' +#' @rdname create_palette +#' @export +#' +create_oxford_palette <- function(name, n, + type = c("sequential", "divergent", "qualitative")) { + ## Determine type of palette ---- + type <- match.arg(type) + + ## Determine which palette to create ---- + if (type == "sequential") pal <- create_palette_sequential(name = name, n = n) + + if (type == "divergent") pal <- create_palette_divergent(name = name, n = n) + + if (type == "qualitative") pal <- create_palette_qualitative(name = name, n = n) + + ## Return palette ---- + pal +} + diff --git a/R/get_named_colours.R b/R/get_named_colours.R index d82dc83..c0d1261 100644 --- a/R/get_named_colours.R +++ b/R/get_named_colours.R @@ -3,14 +3,15 @@ #' #' @param pattern Optional. A character value or vector to use as a search term. #' Default is NULL in which case all the Oxford colours are returned. -#' @param type A character vector of colour type. Can be "rgb", "cmyk", "hex", +#' @param model A character vector of colour model. Can be "rgb", "cmyk", "hex", #' or "pantone". Default is "hex". #' -#' @return A named vector of Oxford colour/s +#' @return A named character value or vector of Oxford colour/s as per `model` +#' specification #' #' @examples #' get_oxford_colours() -#' get_oxford_colours(type = "rgb") +#' get_oxford_colours(model = "rgb") #' get_oxford_colours(pattern = "lilac") #' get_oxford_colours(pattern = c("lilac", "sage green")) #' @@ -18,9 +19,9 @@ #' @export #' get_oxford_colour <- function(pattern = NULL, - type = c("hex", "rgb", "cmyk", "pantone")){ + model = c("hex", "rgb", "cmyk", "pantone")){ ## Get type ---- - type <- match.arg(type) + model <- match.arg(model) ## Get df ---- df <- oxfordtheme::oxford_colours @@ -28,20 +29,20 @@ get_oxford_colour <- function(pattern = NULL, ## Determine if there is something specific to search for ---- if (!is.null(pattern)) { ## Get colours vector ---- - ox_cols <- df[stringr::str_detect(df$name, pattern = pattern), c("name", type)] |> + ox_cols <- df[stringr::str_detect(df$name, pattern = pattern), c("name", model)] |> (\(x) { - cols <- x[[type]] + cols <- x[[model]] names(cols) <- x[["name"]] cols } )() } else { ## Get colours vector ---- - ox_cols <- df[ , c("name", type)] |> + ox_cols <- df[ , c("name", model)] |> (\(x) { - cols <- x[[type]] + cols <- x[[model]] names(cols) <- x[["name"]] cols } @@ -57,12 +58,12 @@ get_oxford_colour <- function(pattern = NULL, #' get_oxford_colours <- function(pattern = NULL, - type = c("hex", "rgb", "cmyk", "pantone")) { + model = c("hex", "rgb", "cmyk", "pantone")) { ## Return all or just specific colours ---- if (is.null(pattern)) { - ox_cols <- get_oxford_colour(pattern = pattern, type = type) + ox_cols <- get_oxford_colour(pattern = pattern, model = model) } else { - ox_cols <- lapply(X = pattern, FUN = get_oxford_colour, type = type) |> + ox_cols <- lapply(X = pattern, FUN = get_oxford_colour, model = model) |> unlist() } diff --git a/R/ox_palettes.R b/R/ox_palettes.R deleted file mode 100644 index 6f86bf9..0000000 --- a/R/ox_palettes.R +++ /dev/null @@ -1,40 +0,0 @@ -#' -#' Complete list of Oxford colour palettes -#' -#' @examples -#' oxford_palettes() -#' -#' @export -#' -oxford_palettes <- function() { - list( - # blues = c("#4891DC", "#9ECEEB", "#44687D", "#5F9BAF", "#A1C4D0", "#007770", "#7BA296", "#BCD2C3"), - # greens = c("#69913B", "#B9CF96", "#CEDBAF", "#AAB300", "#DBDE72", "#E3E597"), - # oranges = c("#CF7A30", "#F5CF47", "#F3DE74"), - # reds = c("#872434", "#BE0F34", "#EBC4CB"), - # grays = c("#A79D96", "#C7C2BC", "#E0DED9"), - heritage = get_oxford_colours( - pattern = c( - "sienna", "peach", "dusk", "sage green", "Oxford green", "Oxford blue" - ) - ), - contemporary = get_oxford_colours( - pattern = c( - "coral", "potters pink", "cool grey", "ocean grey", "aqua", "Oxford blue" - ) - ), - celebratory = get_oxford_colours( - pattern = c( - "viridian", "mauve", "ochre", "lavender", "plum", "Oxford blue" - ) - ), - corporate = get_oxford_colours( - c("orange", "sky blue", "lime green", "cerulean", "royal blue", "Oxford blue") - ) - ) -} - - - - - diff --git a/R/oxfordtheme.R b/R/oxfordtheme.R index b3fd00d..fc2b05d 100644 --- a/R/oxfordtheme.R +++ b/R/oxfordtheme.R @@ -1,9 +1,9 @@ #' -#' Oxford Theme and Theme Components -#' -#' Theme and theme components for 'ggplot2' based on University of Oxford's -#' visual identity guidelines +#' Oxford Palette, Theme, and Theme Components #' +#' Palette, theme, and theme components based on University of Oxford's visual +#' identity guidelines +#' . #' #' @md #' @name oxfordtheme @@ -11,6 +11,7 @@ #' @author Ernest Guevarra (ernest@guevarra.io) #' @keywords internal #' @importFrom stringr str_pad -#' @importFrom grDevices col2rgb +#' @importFrom grDevices col2rgb rgb colorRampPalette +#' @importFrom graphics rect par image text #' "_PACKAGE" diff --git a/R/utils.R b/R/utils.R index b3f7ffa..37008e7 100644 --- a/R/utils.R +++ b/R/utils.R @@ -36,3 +36,19 @@ cmyk2rgb <- function(C, M, Y, K) { grDevices::col2rgb() |> (\(x) c(R = x[1], G = x[2], B = x[3]))() } + + +#' +#' @export +#' +print.palette <- function(x, ...) { + n <- length(x) + old <- par(mar = c(0.5, 0.5, 0.5, 0.5)) + on.exit(par(old)) + + image(1:n, 1, as.matrix(1:n), col = x, + ylab = "", xaxt = "n", yaxt = "n", bty = "n") + + rect(0, 0.9, n + 1, 1.1, col = rgb(1, 1, 1, 0.8), border = NA) + text((n + 1) / 2, 1, labels = attr(x, "name"), cex = 1, family = "serif") +} diff --git a/README.Rmd b/README.Rmd index 8b2e44c..1f6594e 100644 --- a/README.Rmd +++ b/README.Rmd @@ -22,7 +22,7 @@ knitr::opts_chunk$set( [![Codecov test coverage](https://codecov.io/gh/OxfordIHTM/oxfordtheme/branch/main/graph/badge.svg)](https://app.codecov.io/gh/OxfordIHTM/oxfordtheme?branch=main) -Theme and theme components for 'ggplot2' based on [University of Oxford](https://ox.ac.uk)'s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines). +Palette, theme, and theme components based on [University of Oxford](https://ox.ac.uk)'s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines). ## What does `oxfordtheme` do? @@ -32,12 +32,16 @@ Currently, the package provides colour palettes consistent with the colours pres ## Installation -`oxfordtheme` is not yet on [CRAN](https://cran.r-project.org). - -You can install the development version of `oxfordtheme` from the [Oxford IHTM R universe](https://oxfordihtm.r-universe.dev) as follows: +`oxfordtheme` is not yet available on [CRAN](https://cran.r-project.org) but can be installed through the [Oxford IHTM R universe](https://oxfordihtm.r-universe.dev) resository as follows: ```R -install.packages("codigo", repos = c('https://oxfordihtm.r-universe.dev', 'https://cloud.r-project.org')) +install.packages( + "oxfordtheme", + repos = c( + 'https://oxfordihtm.r-universe.dev', + 'https://cloud.r-project.org' + ) +) ``` ## Usage diff --git a/README.md b/README.md index ba75077..10c6951 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](h coverage](https://codecov.io/gh/OxfordIHTM/oxfordtheme/branch/main/graph/badge.svg)](https://app.codecov.io/gh/OxfordIHTM/oxfordtheme?branch=main) -Theme and theme components for ‘ggplot2’ based on [University of +Palette, theme, and theme components based on [University of Oxford](https://ox.ac.uk)’s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines). @@ -34,13 +34,18 @@ time. ## Installation -`oxfordtheme` is not yet on [CRAN](https://cran.r-project.org). - -You can install the development version of `oxfordtheme` from the -[Oxford IHTM R universe](https://oxfordihtm.r-universe.dev) as follows: +`oxfordtheme` is not yet available on [CRAN](https://cran.r-project.org) +but can be installed through the [Oxford IHTM R +universe](https://oxfordihtm.r-universe.dev) resository as follows: ``` r -install.packages("codigo", repos = c('https://oxfordihtm.r-universe.dev', 'https://cloud.r-project.org')) +install.packages( + "oxfordtheme", + repos = c( + 'https://oxfordihtm.r-universe.dev', + 'https://cloud.r-project.org' + ) +) ``` ## Usage diff --git a/man/create_palette.Rd b/man/create_palette.Rd new file mode 100644 index 0000000..e56f347 --- /dev/null +++ b/man/create_palette.Rd @@ -0,0 +1,46 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/create_palette.R +\name{create_palette_sequential} +\alias{create_palette_sequential} +\alias{create_palette_divergent} +\alias{create_palette_qualitative} +\alias{create_oxford_palette} +\title{Create palette based on Oxford palettes} +\usage{ +create_palette_sequential(name, n) + +create_palette_divergent(name, n) + +create_palette_qualitative(name, n) + +create_oxford_palette( + name, + n, + type = c("sequential", "divergent", "qualitative") +) +} +\arguments{ +\item{name}{Name of Oxford palette to use} + +\item{n}{Number of colours desired/required. Oxford palettes have at least +5 colours. All colour schemes are derived from the University of Oxford +[visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines). +#If NULL (default), use all colours.} + +\item{type}{A character value for type of palette to use. Can be either +sequential, divergent, or qualitative.} +} +\value{ +A character vector of desired/required colours with length equivalent + to `n` +} +\description{ +Create palette based on Oxford palettes +} +\examples{ +create_palette_sequential("blues", 5) +create_palette_divergent("brbg", 10) +create_palette_qualitative("heritage", 5) +create_oxford_palette("blues", 5) + +} diff --git a/man/get_oxford_colour.Rd b/man/get_oxford_colour.Rd index 12fc166..b600cec 100644 --- a/man/get_oxford_colour.Rd +++ b/man/get_oxford_colour.Rd @@ -5,26 +5,27 @@ \alias{get_oxford_colours} \title{Get named Oxford colours vector} \usage{ -get_oxford_colour(pattern = NULL, type = c("hex", "rgb", "cmyk", "pantone")) +get_oxford_colour(pattern = NULL, model = c("hex", "rgb", "cmyk", "pantone")) -get_oxford_colours(pattern = NULL, type = c("hex", "rgb", "cmyk", "pantone")) +get_oxford_colours(pattern = NULL, model = c("hex", "rgb", "cmyk", "pantone")) } \arguments{ \item{pattern}{Optional. A character value or vector to use as a search term. Default is NULL in which case all the Oxford colours are returned.} -\item{type}{A character vector of colour type. Can be "rgb", "cmyk", "hex", +\item{model}{A character vector of colour model. Can be "rgb", "cmyk", "hex", or "pantone". Default is "hex".} } \value{ -A named vector of Oxford colour/s +A named character value or vector of Oxford colour/s as per `model` + specification } \description{ Get named Oxford colours vector } \examples{ get_oxford_colours() -get_oxford_colours(type = "rgb") +get_oxford_colours(model = "rgb") get_oxford_colours(pattern = "lilac") get_oxford_colours(pattern = c("lilac", "sage green")) diff --git a/man/oxford_palettes.Rd b/man/oxford_palette.Rd similarity index 83% rename from man/oxford_palettes.Rd rename to man/oxford_palette.Rd index 193057e..9b34efa 100644 --- a/man/oxford_palettes.Rd +++ b/man/oxford_palette.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ox_palettes.R +% Please edit documentation in R/create_palette.R \name{oxford_palettes} \alias{oxford_palettes} \title{Complete list of Oxford colour palettes} diff --git a/man/oxfordtheme.Rd b/man/oxfordtheme.Rd index afd9251..915f603 100644 --- a/man/oxfordtheme.Rd +++ b/man/oxfordtheme.Rd @@ -4,10 +4,18 @@ \name{oxfordtheme} \alias{oxfordtheme} \alias{oxfordtheme-package} -\title{Oxford Theme and Theme Components} +\title{Oxford Palette, Theme, and Theme Components} \description{ -Theme and theme components for 'ggplot2' based on University of Oxford's -visual identity guidelines \url{https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines} +Palette, theme, and theme components based on University of Oxford's visual +identity guidelines +\url{https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines}. +} +\seealso{ +Useful links: +\itemize{ + \item \url{http://oxford-ihtm.io/oxfordtheme/} +} + } \author{ Ernest Guevarra (ernest@guevarra.io) diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml index 0b0f13d..fd4ba53 100644 --- a/pkgdown/_pkgdown.yml +++ b/pkgdown/_pkgdown.yml @@ -46,6 +46,13 @@ reference: contents: - oxford_palettes + - title: Create palettes + contents: + - create_palette_sequential + - create_palette_divergent + - create_palette_qualitative + - create_oxford_palette + - title: Get colours contents: - get_oxford_colour From 80cce514fbae5f468e0d06c53ea6d27a65b6b243 Mon Sep 17 00:00:00 2001 From: Ernest Guevarra Date: Tue, 27 Feb 2024 01:55:07 +0000 Subject: [PATCH 2/4] update README --- README.Rmd | 54 +++++++++- README.md | 100 ++++++++++++++++++ man/figures/README-ggplot-example-1.png | Bin 0 -> 5268 bytes man/figures/README-oxford-palettes-1.png | Bin 0 -> 1537 bytes .../README-oxford-palettes-celebratory-1.png | Bin 0 -> 1700 bytes .../README-oxford-palettes-contemporary-1.png | Bin 0 -> 1876 bytes .../README-oxford-palettes-corporate-1.png | Bin 0 -> 1510 bytes .../README-oxford-palettes-heritage-1.png | Bin 0 -> 1537 bytes 8 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 man/figures/README-ggplot-example-1.png create mode 100644 man/figures/README-oxford-palettes-1.png create mode 100644 man/figures/README-oxford-palettes-celebratory-1.png create mode 100644 man/figures/README-oxford-palettes-contemporary-1.png create mode 100644 man/figures/README-oxford-palettes-corporate-1.png create mode 100644 man/figures/README-oxford-palettes-heritage-1.png diff --git a/README.Rmd b/README.Rmd index 1f6594e..2bff00f 100644 --- a/README.Rmd +++ b/README.Rmd @@ -8,9 +8,11 @@ output: github_document knitr::opts_chunk$set( collapse = TRUE, comment = "#>", - fig.path = "man/figures/README-", - out.width = "100%" + fig.path = "man/figures/README-" ) + +library(oxfordtheme) +library(ggplot2) ``` # oxfordtheme: Oxford Theme and Theme Components @@ -46,7 +48,55 @@ install.packages( ## Usage +### Oxford colours + +Based on the [University of Oxford](https://ox.ac.uk)'s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines), the following colours are available from this package: + +```{r oxford-colours} +oxford_colours |> + knitr::kable() +``` + +### Oxford palettes + +Based on the [University of Oxford](https://ox.ac.uk)'s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines), the following palettes are available from this package: + +#### Heritage + +```{r oxford-palettes-heritage, echo = TRUE, fig.height = 1} +create_oxford_palette(name = "heritage", n = 5, type = "qualitative") +``` + +#### Contemporary +```{r oxford-palettes-contemporary, echo = TRUE, fig.height = 1} +create_oxford_palette(name = "contemporary", n = 5, type = "qualitative") +``` + +#### Celebratory + +```{r oxford-palettes-celebratory, echo = TRUE, fig.height = 1} +create_oxford_palette(name = "celebratory", n = 5, type = "qualitative") +``` + +#### Corporate + +```{r oxford-palettes-corporate, echo = TRUE, fig.height = 1} +create_oxford_palette(name = "corporate", n = 5, type = "qualitative") +``` + + ## Community guidelines diff --git a/README.md b/README.md index 10c6951..ea3236e 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,106 @@ install.packages( ## Usage +### Oxford colours + +Based on the [University of Oxford](https://ox.ac.uk)’s [visual identity +guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines), +the following colours are available from this package: + +``` r +oxford_colours |> + knitr::kable() +``` + +| name | rgb | cmyk | hex | pantone | +|:---------------------|:--------------|:----------------|:---------|:--------------| +| Oxford blue | 0, 33, 71 | 100, 87, 42, 51 | \#002147 | 282 | +| Oxford mauve | 119, 104, 133 | 58, 60, 27, 10 | \#776885 | 667C | +| Oxford peach | 224, 141, 121 | 2, 58, 51, 0 | \#E08D79 | 4051C | +| Oxford potters pink | 237, 147, 144 | 0, 57, 34, 0 | \#ED9390 | 2339C | +| Oxford dusk | 196, 162, 158 | 20, 40, 31, 5 | \#C4A29E | 6030C | +| Oxford lilac | 209, 189, 213 | 18, 30, 4, 0 | \#D1BDD5 | 524C | +| Oxford sienna | 153, 70, 54 | 25, 82, 80, 19 | \#994636 | 4036C | +| Oxford CCB red | 127, 5, 95 | 48, 100, 19, 15 | \#AA1A2D | 187C | +| Oxford plum | 127, 5, 95 | 48, 100, 19, 15 | \#7F055F | 2425C | +| Oxford coral | 254, 97, 90 | 0, 79, 56, 0 | \#FE615A | 178C | +| Oxford lavender | 212, 205, 244 | 19, 22, 0, 0 | \#D4CDF4 | 2635C | +| Oxford orange | 251, 86, 7 | 0, 76, 95, 0 | \#FB5607 | 1655C | +| Oxford pink | 230, 0, 126 | 0, 100, 0, 0 | \#E6007E | 2385C | +| Oxford green | 66, 106, 90 | 79, 35, 64, 26 | \#426A5A | 5545C | +| Oxford ocean grey | 120, 158, 158 | 61, 22, 37, 4 | \#789E9E | 2211C | +| Oxford yellow ochre | 226, 192, 68 | 10, 23, 93, 1 | \#E2C044 | 4016C | +| Oxford cool grey | 228, 240, 239 | 15, 0, 8, 0 | \#E4F0EF | 7541C | +| Oxford sky blue | 185, 214, 242 | 34, 6, 0, 0 | \#B9D6F2 | 277C | +| Oxford sage green | 160, 175, 132 | 45, 19, 58, 3 | \#A0AF84 | 7494C | +| Oxford viridian | 21, 97, 109 | 92, 36, 43, 27 | \#15616D | 5473C | +| Oxford royal blue | 29, 66, 166 | 96, 75, 0, 0 | \#1D42A6 | 2126C | +| Oxford aqua | 0, 170, 180 | 84, 0, 33, 0 | \#00AAB4 | 7710C | +| Oxford vivid green | 101, 229, 174 | 56, 0, 46, 0 | \#65E5AE | 3385C | +| Oxford lime green | 149, 193, 31 | 54, 0, 100, 0 | \#95C11F | 2292C | +| Oxford cerulean blue | 73, 182, 255 | 68, 11, 0, 0 | \#49B6FF | 292C | +| Oxford lemon yellow | 247, 239, 102 | 8, 0, 69, 0 | \#F7EF66 | 3935C | +| Oxford charcoal | 33, 29, 28 | 70, 67, 61, 81 | \#211D1C | 419 C | +| Oxford ash grey | 97, 97, 95 | 57, 46, 48, 36 | \#61615F | 6215 C | +| Oxford umber | 137, 130, 122 | 43, 39, 43, 22 | \#89827A | 403 C | +| Oxford stone grey | 217, 216, 214 | 17, 13, 15, 0 | \#D9D8D6 | Cool Gray 1 C | +| Oxford shell grey | 241, 238, 233 | 6, 6, 9, 0 | \#F1EEE9 | Warm Gray 1 C | +| Oxford off white | 242, 240, 240 | 6, 6, 6, 0 | \#F2F0F0 | 663 C | +| Gold | | | | 10122C | +| Silver | | | | 10103C | + +### Oxford palettes + +Based on the [University of Oxford](https://ox.ac.uk)’s [visual identity +guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines), +the following palettes are available from this package: + +#### Heritage + +``` r +create_oxford_palette(name = "heritage", n = 5, type = "qualitative") +``` + +![](man/figures/README-oxford-palettes-heritage-1.png) + +#### Contemporary + +``` r +create_oxford_palette(name = "contemporary", n = 5, type = "qualitative") +``` + +![](man/figures/README-oxford-palettes-contemporary-1.png) + +#### Celebratory + +``` r +create_oxford_palette(name = "celebratory", n = 5, type = "qualitative") +``` + +![](man/figures/README-oxford-palettes-celebratory-1.png) + +#### Corporate + +``` r +create_oxford_palette(name = "corporate", n = 5, type = "qualitative") +``` + +![](man/figures/README-oxford-palettes-corporate-1.png) + + + ## Community guidelines Feedback, bug reports and feature requests are welcome; file issues or diff --git a/man/figures/README-ggplot-example-1.png b/man/figures/README-ggplot-example-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c40ac92433586cb97aff92eb8a7de033706594cd GIT binary patch literal 5268 zcmeHLXH=70mj($CKp=pK(h;Q#2uQCQqzOooptMi~5u{fMEg&5PQ4yqQP(eg`FTqzq zK$?j37U?~K3kfxu;Jx>oxwB^On)1!RdDl8?oxRW5`#gJ}=d88&8-K${hmoF>o`Qmc zQBN0YNFMbi7#J8C8JU=vn3WP3*-xK7&B4KO=FFM1XU}qSa&mET zadUI?@bK{R^78TV@$>Tw2nd`zcTP}H@cjAnLPA2q!ongVBBG+AVq#+A;^Gn#5|WaV zQc_aV($beMU6PTJk(HH|lasrA`Levcyn=#)qN1Xbl9IBrvWkj|s;a8Gy1IsjhNh;b zmX_8P@^|m{wQJXObaZreb@lZ0^!4=(3=FPcziwz~Xk=t$Y;1hv#tjn_6H`-DGcz-D zbMu=wZ(3Mbz+f;-OUv80Z(CVeSzBA%*x1&?9v&W^o}OM_Uf$l`K0ZFazP^5be*XUc0RaJlfq_9m zLBYYnAt50M1R^XfEId3sA|fI(G7^bIMny$MM@K(=_%J3WCN?%UE-o%UK0YBKAu%yA zDJdyAIXNXI<xUcAW8 z&d$ln$<58p%gcND^5v^nuTUsdet!Pz*RS8adGq$|+k%3E!otFL@7@&^6}^A|{=

O-;?s&1f{brKRQL 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 literal 0 HcmV?d00001 diff --git a/man/figures/README-oxford-palettes-celebratory-1.png b/man/figures/README-oxford-palettes-celebratory-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3c840c37ffdc0d368b13643332af8ac893a03746 GIT binary patch literal 1700 zcmd5+=Tp-O5d9?~0s#UF5h*8jK}wJo=|N%W5DB0Z4bnnMD25;egn$B41wl`GP^m|e zu5?9-fT2hSIqoQ-gd#P9A{XaA-Tec1A9iQ=&Fs9L+4nXUV__%&6Ndo+AYg2yZv_Bg z8mD&RfpGHnV?{3xz>P7pHsG`%5QvKl0)=uNIt1n6;pXM#f${S4!Fc)kU;_MnZ~=Zn zxPXu#{IHOq@DU*q;ll`#BM5{r;ui7fQ4vv5gqYY-35jEpl44TFB~G7`I(z2Cxw9u_ zq|eA+I43W6UO`?OsUV|>yr85gr+iUPMM+*&SwT$&iBeTmM=5ElD{E<}XlttKXrs`& zm-Nu;SM)UXFKZbZ=$M&Yu`tuWYH5hQYHWiwv9&g}v$e3lX6bMp<7kJuVSg3ph;_PQ z?ToW=ak9m`+IzS;c)B}!;cpN;aYQdCAMacKJ}x9bw*Y^4@@;$|34g~UDmc)Ka>qL) zh!7e~yc!nWsrYSkNqft0@7u~c-jvhdmVaok z=xl%4^{%q}eO1qgn%>UZzNzW{?)pK-)?iP=NPpAlr{=MNmhr*X&%S6FqJW zOoM9G2TF@vRiIgRhg_So+)!YJ;EtoenKFcF02#ZKxNEjkDr>?no5(`g`t#8Mc@3%FhTz@y=?M-2 z`@H9DVekVRWc^w%q%6s&gZ1qQO-eV=E&G6nbLDP2R&%SwjyW6C-lELAjz1tq)wOkU#XUd`l#zaE#*_-K`5LO#s=K?~-w~ITYxt3%W#i8XOsaM@ zBPvgPtFv3ARQEocX>HbEQrKG~KfFRb)5lWgcDG+Gbv6S~k99;Ji5Zo`XU}MPYNy0b z$PU-h$m)C;=-2PCsO?TZiZKb{WbTmrwsraUAFXTLRMPX4twI zL8=BULc6yRvDCEAsNIMZEhg^(TPe^6l=vhVLxmS`!&EkR1*4EwtYy%`X}+!S{NXVO zhO_!H+LAnpkl`|r)#z#QQ{PaJy#JNt|2E%_V48H(KTHe%x1ZTa*-*I>2(n9z^J4&G M0}K7~%TAGh0ln-CZ2$lO literal 0 HcmV?d00001 diff --git a/man/figures/README-oxford-palettes-contemporary-1.png b/man/figures/README-oxford-palettes-contemporary-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d28c62bccd23462e13e17d076f59ebacf554386 GIT binary patch literal 1876 zcmd5-dsNa17XE?nCv~(eAG4$8V`?HR)0#B3d|;xWk@$Yn|L)m8?mhS3^ZoJNbH4jsBGS)G zPuo}<002F2n0o*KfN9D)N>fFd*URh@lmi43j`C2pKobiL2CJ&7s;Q}|tE+2hXlQC` zYH4X{YisN1=;-R|>gnm}>+3@xkX^fW?cTlHz`(%J&~VS5J$v`=H8L{Vw{PEmV`F0z z6BAQYQ!}%_eEY4rg@uKsrR9MGR@TSADEAR3Jh3JMMh2?-4i4GRkk4-b!sh=`1gjEahi zj*gCriHVJk#b7SS#l^+PCnP2&CM8`-PEJlqNyTEXrKP2%r>AFRWZ-bPs;Zyxczjk? zR(5uFPEOAC>xA6g+`PQJ{QRG9+_+ItP;m3+FGM2o)~(xxg})XR6%`lXA(2QWC8cCC zxvZ>=LMf+GsTCC!m6cW1)zvf_t)`}?wzjseuCBhmo=&GXH2l`s*!1ARLk5G<+}!-= zQFBYnqt@0ICbN~rVz#xh9zSktZ*OO_pKv(rr%#`DbZ~jR4nCjv?Af!<&cAncbv}RI z)!qI4#fulcy*+(>z5V@t0zv=4fIui57#ti}em^J@{qgdpNGyIS7K>lK8X6uRmPr0F zGBPqcIyyEs_U6q$$H&JfCf-g?PEJoxNu|=oMd|yMnYp>yckkxr=jUazg~dhL($eDc z@>1!YrInQxx%~a=s$8K^tgo+aY^-l?ZhZK#`SIh2t*wurK5cDpf102F5*@NLF}}02 zvw$h;Rw_#CDl8Za0Qy~D1Jsk!hyeiA2j1>(C|u>zm<)}&xQ`$YPd{pJFDQij+ydPe zCvpB(W*)tu8KCKDL8qWfE=6#V!TZrIcJ5E(Fyd}o_N6}B;MfdAHc+3RctX)y5XQr^ ztLD1S;Dwnkl@NZ~Y}UwfibXM20&%TZL$3ZnD0vMcbMLE;3`MxIEl0@NC*ClCZMN=UVF1vULBG@t<&nX_6* zLQ}9p)z)?Re+u`7tQ}E&d4w2{wXOIl04nr92vSJ&m3HL zZjCO?YgAM-LO*nme3oe4@RD8~j39vRUj?Xy<6!zvC_&Msy;Jy@%c)q1{$Q|q$psrr zoq|h>VVCo`^vg-}zGKpSL9tmy)kLOKr86#hTg1vkJm4@x>aD*ge)bPez1jP=lOfI5OCKS`=I{=SRhw+taLpl~3(ePMz$0}^F`X?!-sY7PFr zORCo=XP3!|e+Xs=$xJ*OOLX@Hv_*wJ@eMIKQ>(S7_y1n{xDvve%C&dJj>C#d<9(jM6 ztjpfCVg+FEEeCoO=-b@6GiSa$AF6pJ&z`!Hh1I12Lheu;XPJ5}vb~omUfmjPWJP2M zc%PZp4(GEsnkFA3C0uBH#nFdtbJ3e&JJ#s!3%0D(@R_TrTyvS^MR-7|yy# zLeXzJz#4sBHZg2d`>RVm|KFIM^0u$?Fr-a`60$Kx=dh;K3lQPI4h8f>;Q#AQk$d?{ fC(!usCb0=AtW%}bQNmolzDI8lKX=C2sJuS`^8A4c literal 0 HcmV?d00001 diff --git a/man/figures/README-oxford-palettes-corporate-1.png b/man/figures/README-oxford-palettes-corporate-1.png new file mode 100644 index 0000000000000000000000000000000000000000..167d86903dc7e9f53235000a6d99b72ae0dd892c GIT binary patch literal 1510 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlVCvY$W$*)rlvKSZ`&jt8|xB|H>EX-_dtZeLT z>>TVIoa~%j99&$S+}vC|JluSIJpBB;0s?$O!UDn~f+C_qqGG~g;v!Pg;<9p5vQEns zmE@FFg4K1vUEUk^LZB1?M z&1@aa9h|M4-E2I(96WuTJh%P#@pthHbPEXf2nzKK3HJ_(@Cl9djf@G1iVcj83yO&k zicJVkNC`_!4Np#wOv#8!%Zg6Vj>*bT$SFw7ElkQQO3p7%DJn}VE>AD1$SAGMEUn6{ ztjn#c&#P(7uWc%*Yc6bPEpBQrZRsp;?J95YsqE;j>Yh;3J+XGew8n|ko2JZcojR*^ z>OuKwv)iW4X`eo~W6q+U`Ahp2t(drM&D7;$5wedYQYt2WG7vuW1a&9m2Uo4aBA zyp22NZ`!$F>z+m1_AcJBf9cKx%XVJ-wCmvV-G^4}IlOZ3kyZPSuG)WW^}!Qs51m|h z`1JZCXEvO=wDt7mZD+1*KYMk@xobNw-rRHP=G)7+_g=q$@Wz8fHy<9l_4vr`Cr598 z_@1_w4=o=N~S-_;}&vr;D#XU;6m{&+jny ze|OLR|Np|oHSbo@hp>^13YMg75V*2QPcC27hMJaJYNLhLJ14e87b>sutXTQhPD|)2*+z)7dYStgK`b zS&)}CkAZc?>{;p#jIX8%7yI)wiY&OPDQ*|toyEX);f+Xp!0l_X+^cr2U7HmDa+Y~n zY3SE!7q_3+UAs;uxZq^a^4{0k&+c#iwNN$szJ28OMJpH=Fr3|B(emv6_Gc?rR{yHp zeAIZ?`+kjmK|fy{eX;2EdaqCSm-s|~nzd%tk(`{~+BugK+1c!vH5`n!+ZKG@EOh$h zcHU;8+gDdy>^fbwEZA)3-EO}nKKA)pTbYF?IlSiHmapI4#~`v`rl|9Ub4yR=UjK09 zlHk=FSGwjMKXkS;^~JgPW#y-q^?5Vh4U>DE(!lh^|ER#0#IT~1RN{MryPzxK-DG#!BBzZQtW>idpYizdUYW*Sy>vxccf>hP%1Hf7_e9 zw&DtCNDJd}T;J|%bvfi#+Gg?Dvhhh_TMRi%w%)v$I?c#dc5dy~njg2;#Tdzm%&EyLgIjsLbivCl9IdY!}mqMoya%YpHi_$%$z(|;~yV9j{#{ja8V<#AWfOqDu=D~Zx0j8p)}JZN?DH;ux6~4p+C&!AgTx14GIV*!3eP@#SaQ}b Z`9jB9`)0w6xxnnr;OXk;vd$@?2>@Nrp??4X literal 0 HcmV?d00001 diff --git a/man/figures/README-oxford-palettes-heritage-1.png b/man/figures/README-oxford-palettes-heritage-1.png new file mode 100644 index 0000000000000000000000000000000000000000..260d2e21e9a4fe0bb9bd7a4a34f2b887b1776abc GIT binary patch literal 1537 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlVCvY$W$*)rlvKSZ`9|ZV>xB|J1jEpQSEUc`o zY;0`oY-}9t>|C6jTwGi{JUo1Sd;$Uj!otEL!os2=B4VPVk`fY9l9JL=QgU)~^78Tu z^74ub3QCHKD$2@gs;V05>Y5rFTAG?V+S+xlCdS5=78cf) zmbTW`4t91fq~&6ArYaWkzrxck&!V`QL)j{ z39+#$iHWI6NomQ+=_x50si|4%>Dd_>`Ptb8xw(aTdBp_bgV)5dYOO~u!x^&Ho z6>C?lShsTJhSjS#tzEl$-MTI7*KgghVcW)y+c$06xn;}lty}kO+qQT6_I*2c?BBWb z!0z3L_U=8hXx@?i`;Q(taO~j06Ne6+Jbd`<@#B}yoVk4V?3J@;ubw-1?ZSndmoMLZ zc<C-pQp1pbh?CrB> z@18$@|Ki1mmoGoQdiCk`>(6iA{Cx4`|NsBZE0?|l#xZAsM`SSr1K(i~W;~w1B87p0 z`M9TxV@SoEx3|OnMFU0J9wr};3k+GcH{o!bD7VH9LD6dGqikAXBGvjg99gFQ3*{H= z6rb}{hVRMk&iBvc`j?SK{?mLB(fkcYaRpZirE7$ zY+`sp|5M!y=sZGVl4()VY_mTzC~ zXCy8DzsYRr)mzgn(?nUzl%~}$E9O|h;Jf#P!{hxww(blwUAktCLD`ieZfmn{>&9)l zSzEe(l)lsZZSx`Fx_|@YtfG?)x+k}+U0rwoS?-I7@-imV-SIQb@8uj*+C1mfI>iPi zlc$qdcGbmgci66zV@4innpNf>`O!G519rNw)(VaJzma`tV-?Gl~%RbwEf73y(-r3Q0 z?)&*&zcsQyMDCt8*X;AU(50zYW?c1`FW8iOe?zG6eX*XX+Vm%vu07otv43OqZR>Uh zt_xRyfgSXFU5rJY!vCTo{*|R>%wOsmqc*Qet}PG+2KUw~;TQ8ZKEGeHLN}K=;}WAu z;9kxzueU|M{HcC>a*fy8&5{fLb6=RZ^x93H0ASpyJ6v^tW?^!Cq2>1rb3mz%>q7m~ m!I&Ha7Ja~zub4Gh@9JwL=0-@q{*evL=M0{%elF{r5}E+C?Y%Mp literal 0 HcmV?d00001 From 170be0551b0c7928ff09b421427fa913a4e311a9 Mon Sep 17 00:00:00 2001 From: Ernest Guevarra Date: Tue, 27 Feb 2024 07:09:08 +0000 Subject: [PATCH 3/4] rename functions --- NAMESPACE | 5 +- R/create_palette.R | 75 +++--------------- R/{get_named_colours.R => get_colours.R} | 20 +---- R/oxford_palette.R | 65 +++++++++++++++ README.Rmd | 46 ++++++----- README.md | 44 ++++------ man/create_palette.Rd | 12 +-- ...DME-oxford-palettes-celebratory-show-1.png | Bin 0 -> 1700 bytes ...ME-oxford-palettes-contemporary-show-1.png | Bin 0 -> 1876 bytes ...EADME-oxford-palettes-corporate-show-1.png | Bin 0 -> 1510 bytes ...README-oxford-palettes-heritage-show-1.png | Bin 0 -> 1537 bytes man/get_oxford_colour.Rd | 4 +- man/oxford_brewer_palette.Rd | 15 ++++ man/oxford_palette.Rd | 15 ---- man/oxford_theme.Rd | 15 ++++ pkgdown/_pkgdown.yml | 5 +- 16 files changed, 162 insertions(+), 159 deletions(-) rename R/{get_named_colours.R => get_colours.R} (76%) create mode 100644 R/oxford_palette.R create mode 100644 man/figures/README-oxford-palettes-celebratory-show-1.png create mode 100644 man/figures/README-oxford-palettes-contemporary-show-1.png create mode 100644 man/figures/README-oxford-palettes-corporate-show-1.png create mode 100644 man/figures/README-oxford-palettes-heritage-show-1.png create mode 100644 man/oxford_brewer_palette.Rd delete mode 100644 man/oxford_palette.Rd create mode 100644 man/oxford_theme.Rd diff --git a/NAMESPACE b/NAMESPACE index 93e474f..b2437f4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,13 +2,14 @@ S3method(print,palette) export(cmyk2rgb) -export(create_oxford_palette) +export(create_brewer_palette) export(create_palette_divergent) export(create_palette_qualitative) export(create_palette_sequential) export(get_oxford_colour) export(get_oxford_colours) -export(oxford_palettes) +export(oxford_brewer_palettes) +export(oxford_theme_palettes) importFrom(grDevices,col2rgb) importFrom(grDevices,colorRampPalette) importFrom(grDevices,rgb) diff --git a/R/create_palette.R b/R/create_palette.R index da729b2..f475a24 100644 --- a/R/create_palette.R +++ b/R/create_palette.R @@ -1,50 +1,5 @@ #' -#' Complete list of Oxford colour palettes -#' -#' @examples -#' oxford_palettes() -#' -#' @rdname oxford_palette -#' @export -#' -oxford_palettes <- function() { - list( - blues = get_oxford_colours(pattern = c("sky blue", "cerulean", "royal blue")), - bugn = get_oxford_colours(pattern = c("sky blue", "aqua", "viridian")), - bupu = get_oxford_colours(pattern = c("sky blue", "royal blue", "plum")), - gnbu = get_oxford_colours(pattern = c("ocean grey", "aqua", "cerulean")), - greens = get_oxford_colours(pattern = c("sage", "lime", "Oxford green")), - greys = get_oxford_colours(pattern = c("shell", "umber", "ash")), - pubu = get_oxford_colours(pattern = c("lavender", "cerulean", "royal blue")), - pubugn = get_oxford_colours(pattern = c("lavender", "cerulean", "aqua")), - purd = get_oxford_colours(pattern = c("lavender", "plum", "red")), - rdpu = get_oxford_colours(pattern = c("potters pink", "Oxford pink", "plum")), - reds = get_oxford_colours(pattern = c("potters", "coral", "red")), - ylgn = get_oxford_colours(pattern = c("lemon", "lime", "Oxford green")), - ylgnbu = get_oxford_colours(pattern = c("lemon", "aqua", "royal blue")), - ylorbr = get_oxford_colours(pattern = c("lemon", "orange", "sienna")), - ylorrd = get_oxford_colours(pattern = c("lemon", "orange", "red")), - brbg = get_oxford_colours(pattern = c("sienna", "cool grey", "Oxford green")), - piylgn = get_oxford_colours(pattern = c("Oxford pink", "cool grey", "Oxford green")), - prgn = get_oxford_colours(pattern = c("plum", "cool grey", "Oxford green")), - puor = get_oxford_colours(pattern = c("orange", "cool grey", "plum")), - rdbu = get_oxford_colours(pattern = c("red", "cool grey", "royal blue")), - rdgy = get_oxford_colours(pattern = c("red", "cool grey", "ash")), - rdylbu = get_oxford_colours(pattern = c("red", "lemon", "royal blue")), - rdylgn = get_oxford_colours(pattern = c("red", "lemon", "Oxford green")), - pastel = get_oxford_colours(pattern = c("mauve", "peach", "lilac", "ocean grey", "ochre", "sky", "sage")), - dark = get_oxford_colours(pattern = c("lemon", "lime", "cerulean", "pink", "orange", "plum", "sienna", "umber")), - heritage = get_oxford_colours(pattern = c("sienna", "peach", "dusk", "sage green", "Oxford green")), - contemporary = get_oxford_colours(pattern = c("coral", "potters pink", "cool grey", "ocean grey", "aqua")), - celebratory = get_oxford_colours(pattern = c("viridian", "mauve", "ochre", "lavender", "plum")), - corporate = get_oxford_colours(c("orange", "sky blue", "lime green", "cerulean", "royal blue")) - ) -} - - - -#' -#' Create palette based on Oxford palettes +#' Create new palettes based on Oxford palettes #' #' @param name Name of Oxford palette to use #' @param n Number of colours desired/required. Oxford palettes have at least @@ -60,8 +15,8 @@ oxford_palettes <- function() { #' @examples #' create_palette_sequential("blues", 5) #' create_palette_divergent("brbg", 10) -#' create_palette_qualitative("heritage", 5) -#' create_oxford_palette("blues", 5) +#' create_palette_qualitative("dark", 5) +#' create_brewer_palette("blues", 5) #' #' @rdname create_palette #' @export @@ -91,7 +46,7 @@ create_palette_sequential <- function(name, n) { } ## Get base palette ---- - pal <- oxford_palettes()[[name]] + pal <- oxford_brewer_palettes()[[name]] ## Update palette to n ---- pal <- grDevices::colorRampPalette(pal)(n) @@ -126,7 +81,7 @@ create_palette_divergent <- function(name, n) { } ## Get base palette ---- - pal <- oxford_palettes()[[name]] + pal <- oxford_brewer_palettes()[[name]] ## Update palette to n ---- pal <- grDevices::colorRampPalette(pal)(n) @@ -148,23 +103,11 @@ create_palette_qualitative <- function(name, n) { "Selected palette is not a qualitative palette. Please verify and try again." ) - ## Check if number of colours is compatible with qualitative ---- - if ( - n > 5 & name %in% c("heritage", "contemporary", "celebratory", "corporate") - ) { - warning( - paste( - "The qualitative palette", name, "has maximum 5 colours. Returning 5 colours." - ) - ) - n <- 5 - } - ## Check if number of colours is compatible with pastel ---- if (n > 8 & name == "pastel") { warning ( paste( - "The qualitative palette", name, "has maximum 8 colours. Returning 8 colours." + "The pastel qualitative palette has maximum 8 colours. Returning 8 colours." ) ) n <- 8 @@ -174,14 +117,14 @@ create_palette_qualitative <- function(name, n) { if (n > 7 & name == "dark") { warning ( paste( - "The qualitative palette", name, "has maximum 7 colours. Returning 7 colours." + "The dark qualitative palette has maximum 7 colours. Returning 7 colours." ) ) n <- 7 } ## Get base palette ---- - pal <- oxford_palettes()[[name]] + pal <- oxford_brewer_palettes()[[name]] ## Update palette to n ---- pal <- grDevices::colorRampPalette(pal)(n) @@ -195,7 +138,7 @@ create_palette_qualitative <- function(name, n) { #' @rdname create_palette #' @export #' -create_oxford_palette <- function(name, n, +create_brewer_palette <- function(name, n, type = c("sequential", "divergent", "qualitative")) { ## Determine type of palette ---- type <- match.arg(type) diff --git a/R/get_named_colours.R b/R/get_colours.R similarity index 76% rename from R/get_named_colours.R rename to R/get_colours.R index c0d1261..0a07d2f 100644 --- a/R/get_named_colours.R +++ b/R/get_colours.R @@ -6,7 +6,7 @@ #' @param model A character vector of colour model. Can be "rgb", "cmyk", "hex", #' or "pantone". Default is "hex". #' -#' @return A named character value or vector of Oxford colour/s as per `model` +#' @return A character value or vector of Oxford colour/s as per `model` #' specification #' #' @examples @@ -29,24 +29,10 @@ get_oxford_colour <- function(pattern = NULL, ## Determine if there is something specific to search for ---- if (!is.null(pattern)) { ## Get colours vector ---- - ox_cols <- df[stringr::str_detect(df$name, pattern = pattern), c("name", model)] |> - (\(x) - { - cols <- x[[model]] - names(cols) <- x[["name"]] - cols - } - )() + ox_cols <- df[[model]][stringr::str_detect(df$name, pattern = pattern)] } else { ## Get colours vector ---- - ox_cols <- df[ , c("name", model)] |> - (\(x) - { - cols <- x[[model]] - names(cols) <- x[["name"]] - cols - } - )() + ox_cols <- df[[model]] } ox_cols diff --git a/R/oxford_palette.R b/R/oxford_palette.R new file mode 100644 index 0000000..6b52a50 --- /dev/null +++ b/R/oxford_palette.R @@ -0,0 +1,65 @@ +#' +#' Oxford theme palettes from visual identity guidelines +#' +#' @examples +#' oxford_theme_palettes() +#' +#' @rdname oxford_theme +#' @export +#' +oxford_theme_palettes <- function() { + list( + heritage = get_oxford_colours( + pattern = c("sienna", "peach", "dusk", "sage green", "Oxford green") + ), + contemporary = get_oxford_colours( + pattern = c("coral", "potters pink", "cool grey", "ocean grey", "aqua") + ), + celebratory = get_oxford_colours( + pattern = c("viridian", "mauve", "ochre", "lavender", "plum") + ), + corporate = get_oxford_colours( + pattern = c("orange", "sky blue", "lime green", "cerulean", "royal blue") + ) + ) +} + + +#' +#' Oxford base map palettes +#' +#' @examples +#' oxford_brewer_palettes() +#' +#' @rdname oxford_brewer_palette +#' @export +#' +oxford_brewer_palettes <- function() { + list( + blues = get_oxford_colours(pattern = c("sky blue", "cerulean", "royal blue")), + bugn = get_oxford_colours(pattern = c("sky blue", "aqua", "viridian")), + bupu = get_oxford_colours(pattern = c("sky blue", "royal blue", "plum")), + gnbu = get_oxford_colours(pattern = c("ocean grey", "aqua", "cerulean")), + greens = get_oxford_colours(pattern = c("sage", "lime", "Oxford green")), + greys = get_oxford_colours(pattern = c("shell", "umber", "ash")), + pubu = get_oxford_colours(pattern = c("lavender", "cerulean", "royal blue")), + pubugn = get_oxford_colours(pattern = c("lavender", "cerulean", "aqua")), + purd = get_oxford_colours(pattern = c("lavender", "plum", "red")), + rdpu = get_oxford_colours(pattern = c("potters pink", "Oxford pink", "plum")), + reds = get_oxford_colours(pattern = c("potters", "coral", "red")), + ylgn = get_oxford_colours(pattern = c("lemon", "lime", "Oxford green")), + ylgnbu = get_oxford_colours(pattern = c("lemon", "aqua", "royal blue")), + ylorbr = get_oxford_colours(pattern = c("lemon", "orange", "sienna")), + ylorrd = get_oxford_colours(pattern = c("lemon", "orange", "red")), + brbg = get_oxford_colours(pattern = c("sienna", "cool grey", "Oxford green")), + piylgn = get_oxford_colours(pattern = c("Oxford pink", "cool grey", "Oxford green")), + prgn = get_oxford_colours(pattern = c("plum", "cool grey", "Oxford green")), + puor = get_oxford_colours(pattern = c("orange", "cool grey", "plum")), + rdbu = get_oxford_colours(pattern = c("red", "cool grey", "royal blue")), + rdgy = get_oxford_colours(pattern = c("red", "cool grey", "ash")), + rdylbu = get_oxford_colours(pattern = c("red", "lemon", "royal blue")), + rdylgn = get_oxford_colours(pattern = c("red", "lemon", "Oxford green")), + pastel = get_oxford_colours(pattern = c("mauve", "peach", "lilac", "ocean grey", "ochre", "sky", "sage")), + dark = get_oxford_colours(pattern = c("lemon", "lime", "cerulean", "pink", "orange", "plum", "sienna", "umber")) + ) +} diff --git a/README.Rmd b/README.Rmd index 2bff00f..b296dcd 100644 --- a/README.Rmd +++ b/README.Rmd @@ -52,51 +52,55 @@ install.packages( Based on the [University of Oxford](https://ox.ac.uk)'s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines), the following colours are available from this package: -```{r oxford-colours} +```{r oxford-colours, echo = FALSE} oxford_colours |> knitr::kable() ``` ### Oxford palettes -Based on the [University of Oxford](https://ox.ac.uk)'s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines), the following palettes are available from this package: +Based on the [University of Oxford](https://ox.ac.uk)'s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines) and the carefully curated colour groups of the official University [theme packs](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines/theme-packs), the following palettes are available from this package: #### Heritage -```{r oxford-palettes-heritage, echo = TRUE, fig.height = 1} -create_oxford_palette(name = "heritage", n = 5, type = "qualitative") +```{r oxford-palettes-heritage-code} +oxford_theme_palettes()$heritage +``` + +```{r oxford-palettes-heritage-show, echo = FALSE, fig.height = 1} +structure(oxford_theme_palettes()$heritage, class = "palette", name = "heritage") ``` #### Contemporary -```{r oxford-palettes-contemporary, echo = TRUE, fig.height = 1} -create_oxford_palette(name = "contemporary", n = 5, type = "qualitative") +```{r oxford-palettes-contemporary-code} +oxford_theme_palettes()$contemporary +``` + +```{r oxford-palettes-contemporary-show, echo = FALSE, fig.height = 1} +structure(oxford_theme_palettes()$contemporary, class = "palette", name = "contemporary") ``` #### Celebratory -```{r oxford-palettes-celebratory, echo = TRUE, fig.height = 1} -create_oxford_palette(name = "celebratory", n = 5, type = "qualitative") +```{r oxford-palettes-celebratory-code} +oxford_theme_palettes()$celebratory +``` + +```{r oxford-palettes-celebratory-show, echo = FALSE, fig.height = 1} +structure(oxford_theme_palettes()$celebratory, class = "palette", name = "celebratory") ``` #### Corporate -```{r oxford-palettes-corporate, echo = TRUE, fig.height = 1} -create_oxford_palette(name = "corporate", n = 5, type = "qualitative") +```{r oxford-palettes-corporate-code} +oxford_theme_palettes()$corporate ``` - + ## Community guidelines diff --git a/README.md b/README.md index ea3236e..bf61614 100644 --- a/README.md +++ b/README.md @@ -56,11 +56,6 @@ Based on the [University of Oxford](https://ox.ac.uk)’s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines), the following colours are available from this package: -``` r -oxford_colours |> - knitr::kable() -``` - | name | rgb | cmyk | hex | pantone | |:---------------------|:--------------|:----------------|:---------|:--------------| | Oxford blue | 0, 33, 71 | 100, 87, 42, 51 | \#002147 | 282 | @@ -101,54 +96,47 @@ oxford_colours |> ### Oxford palettes Based on the [University of Oxford](https://ox.ac.uk)’s [visual identity -guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines), +guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines) +and the carefully curated colour groups of the official University +[theme +packs](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines/theme-packs), the following palettes are available from this package: #### Heritage ``` r -create_oxford_palette(name = "heritage", n = 5, type = "qualitative") +oxford_theme_palettes()$heritage +#> [1] "#994636" "#E08D79" "#C4A29E" "#A0AF84" "#426A5A" ``` -![](man/figures/README-oxford-palettes-heritage-1.png) +![](man/figures/README-oxford-palettes-heritage-show-1.png) #### Contemporary ``` r -create_oxford_palette(name = "contemporary", n = 5, type = "qualitative") +oxford_theme_palettes()$contemporary +#> [1] "#FE615A" "#ED9390" "#E4F0EF" "#789E9E" "#00AAB4" ``` -![](man/figures/README-oxford-palettes-contemporary-1.png) +![](man/figures/README-oxford-palettes-contemporary-show-1.png) #### Celebratory ``` r -create_oxford_palette(name = "celebratory", n = 5, type = "qualitative") +oxford_theme_palettes()$celebratory +#> [1] "#15616D" "#776885" "#E2C044" "#D4CDF4" "#7F055F" ``` -![](man/figures/README-oxford-palettes-celebratory-1.png) +![](man/figures/README-oxford-palettes-celebratory-show-1.png) #### Corporate ``` r -create_oxford_palette(name = "corporate", n = 5, type = "qualitative") +oxford_theme_palettes()$corporate +#> [1] "#FB5607" "#B9D6F2" "#95C11F" "#49B6FF" "#1D42A6" ``` -![](man/figures/README-oxford-palettes-corporate-1.png) - - +![](man/figures/README-oxford-palettes-corporate-show-1.png) ## Community guidelines diff --git a/man/create_palette.Rd b/man/create_palette.Rd index e56f347..2bf2bae 100644 --- a/man/create_palette.Rd +++ b/man/create_palette.Rd @@ -4,8 +4,8 @@ \alias{create_palette_sequential} \alias{create_palette_divergent} \alias{create_palette_qualitative} -\alias{create_oxford_palette} -\title{Create palette based on Oxford palettes} +\alias{create_brewer_palette} +\title{Create new palettes based on Oxford palettes} \usage{ create_palette_sequential(name, n) @@ -13,7 +13,7 @@ create_palette_divergent(name, n) create_palette_qualitative(name, n) -create_oxford_palette( +create_brewer_palette( name, n, type = c("sequential", "divergent", "qualitative") @@ -35,12 +35,12 @@ A character vector of desired/required colours with length equivalent to `n` } \description{ -Create palette based on Oxford palettes +Create new palettes based on Oxford palettes } \examples{ create_palette_sequential("blues", 5) create_palette_divergent("brbg", 10) -create_palette_qualitative("heritage", 5) -create_oxford_palette("blues", 5) +create_palette_qualitative("dark", 5) +create_brewer_palette("blues", 5) } diff --git a/man/figures/README-oxford-palettes-celebratory-show-1.png b/man/figures/README-oxford-palettes-celebratory-show-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3c840c37ffdc0d368b13643332af8ac893a03746 GIT binary patch literal 1700 zcmd5+=Tp-O5d9?~0s#UF5h*8jK}wJo=|N%W5DB0Z4bnnMD25;egn$B41wl`GP^m|e zu5?9-fT2hSIqoQ-gd#P9A{XaA-Tec1A9iQ=&Fs9L+4nXUV__%&6Ndo+AYg2yZv_Bg z8mD&RfpGHnV?{3xz>P7pHsG`%5QvKl0)=uNIt1n6;pXM#f${S4!Fc)kU;_MnZ~=Zn zxPXu#{IHOq@DU*q;ll`#BM5{r;ui7fQ4vv5gqYY-35jEpl44TFB~G7`I(z2Cxw9u_ zq|eA+I43W6UO`?OsUV|>yr85gr+iUPMM+*&SwT$&iBeTmM=5ElD{E<}XlttKXrs`& zm-Nu;SM)UXFKZbZ=$M&Yu`tuWYH5hQYHWiwv9&g}v$e3lX6bMp<7kJuVSg3ph;_PQ z?ToW=ak9m`+IzS;c)B}!;cpN;aYQdCAMacKJ}x9bw*Y^4@@;$|34g~UDmc)Ka>qL) zh!7e~yc!nWsrYSkNqft0@7u~c-jvhdmVaok z=xl%4^{%q}eO1qgn%>UZzNzW{?)pK-)?iP=NPpAlr{=MNmhr*X&%S6FqJW zOoM9G2TF@vRiIgRhg_So+)!YJ;EtoenKFcF02#ZKxNEjkDr>?no5(`g`t#8Mc@3%FhTz@y=?M-2 z`@H9DVekVRWc^w%q%6s&gZ1qQO-eV=E&G6nbLDP2R&%SwjyW6C-lELAjz1tq)wOkU#XUd`l#zaE#*_-K`5LO#s=K?~-w~ITYxt3%W#i8XOsaM@ zBPvgPtFv3ARQEocX>HbEQrKG~KfFRb)5lWgcDG+Gbv6S~k99;Ji5Zo`XU}MPYNy0b z$PU-h$m)C;=-2PCsO?TZiZKb{WbTmrwsraUAFXTLRMPX4twI zL8=BULc6yRvDCEAsNIMZEhg^(TPe^6l=vhVLxmS`!&EkR1*4EwtYy%`X}+!S{NXVO zhO_!H+LAnpkl`|r)#z#QQ{PaJy#JNt|2E%_V48H(KTHe%x1ZTa*-*I>2(n9z^J4&G M0}K7~%TAGh0ln-CZ2$lO literal 0 HcmV?d00001 diff --git a/man/figures/README-oxford-palettes-contemporary-show-1.png b/man/figures/README-oxford-palettes-contemporary-show-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d28c62bccd23462e13e17d076f59ebacf554386 GIT binary patch literal 1876 zcmd5-dsNa17XE?nCv~(eAG4$8V`?HR)0#B3d|;xWk@$Yn|L)m8?mhS3^ZoJNbH4jsBGS)G zPuo}<002F2n0o*KfN9D)N>fFd*URh@lmi43j`C2pKobiL2CJ&7s;Q}|tE+2hXlQC` zYH4X{YisN1=;-R|>gnm}>+3@xkX^fW?cTlHz`(%J&~VS5J$v`=H8L{Vw{PEmV`F0z z6BAQYQ!}%_eEY4rg@uKsrR9MGR@TSADEAR3Jh3JMMh2?-4i4GRkk4-b!sh=`1gjEahi zj*gCriHVJk#b7SS#l^+PCnP2&CM8`-PEJlqNyTEXrKP2%r>AFRWZ-bPs;Zyxczjk? zR(5uFPEOAC>xA6g+`PQJ{QRG9+_+ItP;m3+FGM2o)~(xxg})XR6%`lXA(2QWC8cCC zxvZ>=LMf+GsTCC!m6cW1)zvf_t)`}?wzjseuCBhmo=&GXH2l`s*!1ARLk5G<+}!-= zQFBYnqt@0ICbN~rVz#xh9zSktZ*OO_pKv(rr%#`DbZ~jR4nCjv?Af!<&cAncbv}RI z)!qI4#fulcy*+(>z5V@t0zv=4fIui57#ti}em^J@{qgdpNGyIS7K>lK8X6uRmPr0F zGBPqcIyyEs_U6q$$H&JfCf-g?PEJoxNu|=oMd|yMnYp>yckkxr=jUazg~dhL($eDc z@>1!YrInQxx%~a=s$8K^tgo+aY^-l?ZhZK#`SIh2t*wurK5cDpf102F5*@NLF}}02 zvw$h;Rw_#CDl8Za0Qy~D1Jsk!hyeiA2j1>(C|u>zm<)}&xQ`$YPd{pJFDQij+ydPe zCvpB(W*)tu8KCKDL8qWfE=6#V!TZrIcJ5E(Fyd}o_N6}B;MfdAHc+3RctX)y5XQr^ ztLD1S;Dwnkl@NZ~Y}UwfibXM20&%TZL$3ZnD0vMcbMLE;3`MxIEl0@NC*ClCZMN=UVF1vULBG@t<&nX_6* zLQ}9p)z)?Re+u`7tQ}E&d4w2{wXOIl04nr92vSJ&m3HL zZjCO?YgAM-LO*nme3oe4@RD8~j39vRUj?Xy<6!zvC_&Msy;Jy@%c)q1{$Q|q$psrr zoq|h>VVCo`^vg-}zGKpSL9tmy)kLOKr86#hTg1vkJm4@x>aD*ge)bPez1jP=lOfI5OCKS`=I{=SRhw+taLpl~3(ePMz$0}^F`X?!-sY7PFr zORCo=XP3!|e+Xs=$xJ*OOLX@Hv_*wJ@eMIKQ>(S7_y1n{xDvve%C&dJj>C#d<9(jM6 ztjpfCVg+FEEeCoO=-b@6GiSa$AF6pJ&z`!Hh1I12Lheu;XPJ5}vb~omUfmjPWJP2M zc%PZp4(GEsnkFA3C0uBH#nFdtbJ3e&JJ#s!3%0D(@R_TrTyvS^MR-7|yy# zLeXzJz#4sBHZg2d`>RVm|KFIM^0u$?Fr-a`60$Kx=dh;K3lQPI4h8f>;Q#AQk$d?{ fC(!usCb0=AtW%}bQNmolzDI8lKX=C2sJuS`^8A4c literal 0 HcmV?d00001 diff --git a/man/figures/README-oxford-palettes-corporate-show-1.png b/man/figures/README-oxford-palettes-corporate-show-1.png new file mode 100644 index 0000000000000000000000000000000000000000..167d86903dc7e9f53235000a6d99b72ae0dd892c GIT binary patch literal 1510 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlVCvY$W$*)rlvKSZ`&jt8|xB|H>EX-_dtZeLT z>>TVIoa~%j99&$S+}vC|JluSIJpBB;0s?$O!UDn~f+C_qqGG~g;v!Pg;<9p5vQEns zmE@FFg4K1vUEUk^LZB1?M z&1@aa9h|M4-E2I(96WuTJh%P#@pthHbPEXf2nzKK3HJ_(@Cl9djf@G1iVcj83yO&k zicJVkNC`_!4Np#wOv#8!%Zg6Vj>*bT$SFw7ElkQQO3p7%DJn}VE>AD1$SAGMEUn6{ ztjn#c&#P(7uWc%*Yc6bPEpBQrZRsp;?J95YsqE;j>Yh;3J+XGew8n|ko2JZcojR*^ z>OuKwv)iW4X`eo~W6q+U`Ahp2t(drM&D7;$5wedYQYt2WG7vuW1a&9m2Uo4aBA zyp22NZ`!$F>z+m1_AcJBf9cKx%XVJ-wCmvV-G^4}IlOZ3kyZPSuG)WW^}!Qs51m|h z`1JZCXEvO=wDt7mZD+1*KYMk@xobNw-rRHP=G)7+_g=q$@Wz8fHy<9l_4vr`Cr598 z_@1_w4=o=N~S-_;}&vr;D#XU;6m{&+jny ze|OLR|Np|oHSbo@hp>^13YMg75V*2QPcC27hMJaJYNLhLJ14e87b>sutXTQhPD|)2*+z)7dYStgK`b zS&)}CkAZc?>{;p#jIX8%7yI)wiY&OPDQ*|toyEX);f+Xp!0l_X+^cr2U7HmDa+Y~n zY3SE!7q_3+UAs;uxZq^a^4{0k&+c#iwNN$szJ28OMJpH=Fr3|B(emv6_Gc?rR{yHp zeAIZ?`+kjmK|fy{eX;2EdaqCSm-s|~nzd%tk(`{~+BugK+1c!vH5`n!+ZKG@EOh$h zcHU;8+gDdy>^fbwEZA)3-EO}nKKA)pTbYF?IlSiHmapI4#~`v`rl|9Ub4yR=UjK09 zlHk=FSGwjMKXkS;^~JgPW#y-q^?5Vh4U>DE(!lh^|ER#0#IT~1RN{MryPzxK-DG#!BBzZQtW>idpYizdUYW*Sy>vxccf>hP%1Hf7_e9 zw&DtCNDJd}T;J|%bvfi#+Gg?Dvhhh_TMRi%w%)v$I?c#dc5dy~njg2;#Tdzm%&EyLgIjsLbivCl9IdY!}mqMoya%YpHi_$%$z(|;~yV9j{#{ja8V<#AWfOqDu=D~Zx0j8p)}JZN?DH;ux6~4p+C&!AgTx14GIV*!3eP@#SaQ}b Z`9jB9`)0w6xxnnr;OXk;vd$@?2>@Nrp??4X literal 0 HcmV?d00001 diff --git a/man/figures/README-oxford-palettes-heritage-show-1.png b/man/figures/README-oxford-palettes-heritage-show-1.png new file mode 100644 index 0000000000000000000000000000000000000000..260d2e21e9a4fe0bb9bd7a4a34f2b887b1776abc GIT binary patch literal 1537 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlVCvY$W$*)rlvKSZ`9|ZV>xB|J1jEpQSEUc`o zY;0`oY-}9t>|C6jTwGi{JUo1Sd;$Uj!otEL!os2=B4VPVk`fY9l9JL=QgU)~^78Tu z^74ub3QCHKD$2@gs;V05>Y5rFTAG?V+S+xlCdS5=78cf) zmbTW`4t91fq~&6ArYaWkzrxck&!V`QL)j{ z39+#$iHWI6NomQ+=_x50si|4%>Dd_>`Ptb8xw(aTdBp_bgV)5dYOO~u!x^&Ho z6>C?lShsTJhSjS#tzEl$-MTI7*KgghVcW)y+c$06xn;}lty}kO+qQT6_I*2c?BBWb z!0z3L_U=8hXx@?i`;Q(taO~j06Ne6+Jbd`<@#B}yoVk4V?3J@;ubw-1?ZSndmoMLZ zc<C-pQp1pbh?CrB> z@18$@|Ki1mmoGoQdiCk`>(6iA{Cx4`|NsBZE0?|l#xZAsM`SSr1K(i~W;~w1B87p0 z`M9TxV@SoEx3|OnMFU0J9wr};3k+GcH{o!bD7VH9LD6dGqikAXBGvjg99gFQ3*{H= z6rb}{hVRMk&iBvc`j?SK{?mLB(fkcYaRpZirE7$ zY+`sp|5M!y=sZGVl4()VY_mTzC~ zXCy8DzsYRr)mzgn(?nUzl%~}$E9O|h;Jf#P!{hxww(blwUAktCLD`ieZfmn{>&9)l zSzEe(l)lsZZSx`Fx_|@YtfG?)x+k}+U0rwoS?-I7@-imV-SIQb@8uj*+C1mfI>iPi zlc$qdcGbmgci66zV@4innpNf>`O!G519rNw)(VaJzma`tV-?Gl~%RbwEf73y(-r3Q0 z?)&*&zcsQyMDCt8*X;AU(50zYW?c1`FW8iOe?zG6eX*XX+Vm%vu07otv43OqZR>Uh zt_xRyfgSXFU5rJY!vCTo{*|R>%wOsmqc*Qet}PG+2KUw~;TQ8ZKEGeHLN}K=;}WAu z;9kxzueU|M{HcC>a*fy8&5{fLb6=RZ^x93H0ASpyJ6v^tW?^!Cq2>1rb3mz%>q7m~ m!I&Ha7Ja~zub4Gh@9JwL=0-@q{*evL=M0{%elF{r5}E+C?Y%Mp literal 0 HcmV?d00001 diff --git a/man/get_oxford_colour.Rd b/man/get_oxford_colour.Rd index b600cec..33b6644 100644 --- a/man/get_oxford_colour.Rd +++ b/man/get_oxford_colour.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/get_named_colours.R +% Please edit documentation in R/get_colours.R \name{get_oxford_colour} \alias{get_oxford_colour} \alias{get_oxford_colours} @@ -17,7 +17,7 @@ Default is NULL in which case all the Oxford colours are returned.} or "pantone". Default is "hex".} } \value{ -A named character value or vector of Oxford colour/s as per `model` +A character value or vector of Oxford colour/s as per `model` specification } \description{ diff --git a/man/oxford_brewer_palette.Rd b/man/oxford_brewer_palette.Rd new file mode 100644 index 0000000..6830745 --- /dev/null +++ b/man/oxford_brewer_palette.Rd @@ -0,0 +1,15 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/oxford_palette.R +\name{oxford_brewer_palettes} +\alias{oxford_brewer_palettes} +\title{Oxford base map palettes} +\usage{ +oxford_brewer_palettes() +} +\description{ +Oxford base map palettes +} +\examples{ +oxford_brewer_palettes() + +} diff --git a/man/oxford_palette.Rd b/man/oxford_palette.Rd deleted file mode 100644 index 9b34efa..0000000 --- a/man/oxford_palette.Rd +++ /dev/null @@ -1,15 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_palette.R -\name{oxford_palettes} -\alias{oxford_palettes} -\title{Complete list of Oxford colour palettes} -\usage{ -oxford_palettes() -} -\description{ -Complete list of Oxford colour palettes -} -\examples{ -oxford_palettes() - -} diff --git a/man/oxford_theme.Rd b/man/oxford_theme.Rd new file mode 100644 index 0000000..bec095d --- /dev/null +++ b/man/oxford_theme.Rd @@ -0,0 +1,15 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/oxford_palette.R +\name{oxford_theme_palettes} +\alias{oxford_theme_palettes} +\title{Oxford theme palettes from visual identity guidelines} +\usage{ +oxford_theme_palettes() +} +\description{ +Oxford theme palettes from visual identity guidelines +} +\examples{ +oxford_theme_palettes() + +} diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml index fd4ba53..49b9312 100644 --- a/pkgdown/_pkgdown.yml +++ b/pkgdown/_pkgdown.yml @@ -44,14 +44,15 @@ reference: - title: Palettes contents: - - oxford_palettes + - oxford_theme_palettes + - oxford_brewer_palettes - title: Create palettes contents: - create_palette_sequential - create_palette_divergent - create_palette_qualitative - - create_oxford_palette + - create_brewer_palette - title: Get colours contents: From ef5f32eeee3eaedd9d40d65b9b08df6736205dd8 Mon Sep 17 00:00:00 2001 From: Ernest Guevarra Date: Tue, 27 Feb 2024 10:42:19 +0000 Subject: [PATCH 4/4] expand README --- R/create_palette.R | 5 + R/get_colours.R | 29 ++++- README.Rmd | 97 ++++++++++++++- README.md | 110 +++++++++++++++++- man/create_palette.Rd | 5 +- man/figures/README-base-mtcars-1.png | Bin 0 -> 13024 bytes man/figures/README-base-mtcars-2.png | Bin 0 -> 7818 bytes man/figures/README-mtcars-barplot-1.png | Bin 0 -> 14478 bytes man/figures/README-mtcars-barplot-2.png | Bin 0 -> 12735 bytes man/figures/README-mtcars-plot-1.png | Bin 0 -> 14478 bytes man/figures/README-mtcars-plot-2.png | Bin 0 -> 12735 bytes man/figures/README-mtcars-scatterplot-1.png | Bin 0 -> 26581 bytes man/figures/README-mtcars-scatterplot-2.png | Bin 0 -> 27334 bytes .../README-oxford-colours-graphic-1.png | Bin 0 -> 3475 bytes man/get_oxford_colour.Rd | 18 ++- 15 files changed, 252 insertions(+), 12 deletions(-) create mode 100644 man/figures/README-base-mtcars-1.png create mode 100644 man/figures/README-base-mtcars-2.png create mode 100644 man/figures/README-mtcars-barplot-1.png create mode 100644 man/figures/README-mtcars-barplot-2.png create mode 100644 man/figures/README-mtcars-plot-1.png create mode 100644 man/figures/README-mtcars-plot-2.png create mode 100644 man/figures/README-mtcars-scatterplot-1.png create mode 100644 man/figures/README-mtcars-scatterplot-2.png create mode 100644 man/figures/README-oxford-colours-graphic-1.png diff --git a/R/create_palette.R b/R/create_palette.R index f475a24..df34208 100644 --- a/R/create_palette.R +++ b/R/create_palette.R @@ -1,6 +1,11 @@ #' #' Create new palettes based on Oxford palettes #' +#' These functions apply a similar approach used and demonstrated by +#' [ColorBrewer](https://colorbrewer2.org) and has been patterned after the +#' syntax of the [RColorBrewer](https://cran.r-project.org/web/packages/RColorBrewer/index.html) +#' package +#' #' @param name Name of Oxford palette to use #' @param n Number of colours desired/required. Oxford palettes have at least #' 5 colours. All colour schemes are derived from the University of Oxford diff --git a/R/get_colours.R b/R/get_colours.R index 0a07d2f..0b38625 100644 --- a/R/get_colours.R +++ b/R/get_colours.R @@ -5,9 +5,12 @@ #' Default is NULL in which case all the Oxford colours are returned. #' @param model A character vector of colour model. Can be "rgb", "cmyk", "hex", #' or "pantone". Default is "hex". +#' @param named Logical. Should the output be a named character value or +#' vector? Default is FALSE. #' #' @return A character value or vector of Oxford colour/s as per `model` -#' specification +#' specification. If `named` is TRUE, returns a named character value or +#' vector. #' #' @examples #' get_oxford_colours() @@ -19,7 +22,8 @@ #' @export #' get_oxford_colour <- function(pattern = NULL, - model = c("hex", "rgb", "cmyk", "pantone")){ + model = c("hex", "rgb", "cmyk", "pantone"), + named = FALSE) { ## Get type ---- model <- match.arg(model) @@ -29,10 +33,20 @@ get_oxford_colour <- function(pattern = NULL, ## Determine if there is something specific to search for ---- if (!is.null(pattern)) { ## Get colours vector ---- - ox_cols <- df[[model]][stringr::str_detect(df$name, pattern = pattern)] + ox_cols <- df[c("name", model)][stringr::str_detect(df$name, pattern = pattern), ] + + if (named) { + ox_cols <- structure(ox_cols[[model]], names = ox_cols[["name"]]) + } else { + ox_cols <- ox_cols[[model]] + } } else { ## Get colours vector ---- ox_cols <- df[[model]] + + if (named) { + names(ox_cols) <- df[["name"]] + } } ox_cols @@ -44,12 +58,15 @@ get_oxford_colour <- function(pattern = NULL, #' get_oxford_colours <- function(pattern = NULL, - model = c("hex", "rgb", "cmyk", "pantone")) { + model = c("hex", "rgb", "cmyk", "pantone"), + named = FALSE) { ## Return all or just specific colours ---- if (is.null(pattern)) { - ox_cols <- get_oxford_colour(pattern = pattern, model = model) + ox_cols <- get_oxford_colour(pattern = pattern, model = model, named = named) } else { - ox_cols <- lapply(X = pattern, FUN = get_oxford_colour, model = model) |> + ox_cols <- lapply( + X = pattern, FUN = get_oxford_colour, model = model, named = named + ) |> unlist() } diff --git a/README.Rmd b/README.Rmd index b296dcd..092d570 100644 --- a/README.Rmd +++ b/README.Rmd @@ -15,7 +15,7 @@ library(oxfordtheme) library(ggplot2) ``` -# oxfordtheme: Oxford Theme and Theme Components +# oxfordtheme: Oxford Palette, Theme, and Theme Components [![Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip) @@ -57,6 +57,22 @@ oxford_colours |> knitr::kable() ``` +```{r oxford-colours-graphic, echo = FALSE, fig.height = 1} +structure(get_oxford_colours() |> (\(x) x[x != ""])(), class = "palette", name = "Oxford Colours") +``` + +You can access either the name, RGB, CMYK, hex code, and/or Pantone values of each Oxford colour through the `get_oxford_colours()` function as follows: + +```{r get-colours} +## Get hex code for Oxford blue +get_oxford_colours(pattern = "Oxford blue") + +## Get hex code for all colours with "blue" in their name (show name in output) +get_oxford_colours(pattern = "blue", named = TRUE) +``` + +The `get_oxford_colours()` function can thus be used to create your own bespoke combination of colours from the Oxford colours palette and create your own theme (see next section for University of Oxford officially recommended themes using the Oxford colours). + ### Oxford palettes Based on the [University of Oxford](https://ox.ac.uk)'s [visual identity guidelines](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines) and the carefully curated colour groups of the official University [theme packs](https://communications.web.ox.ac.uk/communications-resources/visual-identity/identity-guidelines/theme-packs), the following palettes are available from this package: @@ -101,6 +117,85 @@ oxford_theme_palettes()$corporate structure(oxford_theme_palettes()$corporate, class = "palette", name = "corporate") ``` +### Oxford theme paletttes for use in plotting + +The University of Oxford recommended theme palettes can be used for plotting. Below is code examples of how this can be done both with base R plotting function and with `ggplot2`. + +#### Base R plot + +```{r mtcars-barplot, fig.show = "hold", fig.height = 8, out.width = "50%"} +## Barplot of cyl and vs of mtcars dataset using heritage Oxford theme + +### Base R +table(mtcars$cyl, mtcars$vs) |> + barplot( + names.arg = c("v-shaped", "straight"), + main = "Engine shape by number of cylinders", + ylab = "n", + legend.text = TRUE, + col = oxford_theme_palettes()$heritage, + args.legend = list( + x = "topright", + inset = 0.002, + title = "Cylinders", + bty = "n" + ) + ) + +### ggplot2 +ggplot( + data = mtcars, + mapping = aes( + x = factor(vs, levels = c(0, 1), labels = c("v-shaped", "straight")), + fill = factor(cyl) + ) + ) + + geom_bar() + + scale_fill_manual(name = "Cylinders", values = oxford_theme_palettes()$heritage) + + labs( + title = "Engine shape by number of cylinders", + x = NULL, + y = "n" + ) + + theme_minimal() +``` + + +```{r mtcars-scatterplot, fig.show = "hold", fig.height = 8, out.width = "50%"} +## Scatterplot of mpg and disp of mtcars dataset using celebratory Oxford theme + +### Base R +cols <- ifelse( + mtcars$cyl == 4, oxford_theme_palettes()$celebratory[1], + ifelse( + mtcars$cyl == 6, oxford_theme_palettes()$celebratory[2], + oxford_theme_palettes()$celebratory[3] + ) +) + +plot( + x = mtcars$mpg, + y = mtcars$disp, + pch = 19, cex = 1.75, col = cols, + main = "Miles per gallon by displacement grouped by number of cylinders", + xlab = "mpg", ylab = "disp" +) +legend( + x = "topright", inset = 0.02, + title = "Cylinders", + legend = c("4", "6", "8"), + pch = 19, pt.cex = 1.5, + col = oxford_theme_palettes()$celebratory[1:3] +) + +### ggplot2 +ggplot(data = mtcars, mapping = aes(x = mpg, y = disp, colour = factor(cyl))) + + geom_point(size = 5) + + scale_colour_manual(name = "Cylinders", values = oxford_theme_palettes()$celebratory) + + labs(title = "Miles per gallon by displacement grouped by number of cylinders") + + theme_minimal() +``` + ## Community guidelines diff --git a/README.md b/README.md index bf61614..3e23657 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# oxfordtheme: Oxford Theme and Theme Components +# oxfordtheme: Oxford Palette, Theme, and Theme Components @@ -93,6 +93,30 @@ the following colours are available from this package: | Gold | | | | 10122C | | Silver | | | | 10103C | +![](man/figures/README-oxford-colours-graphic-1.png) + +You can access either the name, RGB, CMYK, hex code, and/or Pantone +values of each Oxford colour through the `get_oxford_colours()` function +as follows: + +``` r +## Get hex code for Oxford blue +get_oxford_colours(pattern = "Oxford blue") +#> [1] "#002147" + +## Get hex code for all colours with "blue" in their name (show name in output) +get_oxford_colours(pattern = "blue", named = TRUE) +#> Oxford blue Oxford sky blue Oxford royal blue +#> "#002147" "#B9D6F2" "#1D42A6" +#> Oxford cerulean blue +#> "#49B6FF" +``` + +The `get_oxford_colours()` function can thus be used to create your own +bespoke combination of colours from the Oxford colours palette and +create your own theme (see next section for University of Oxford +officially recommended themes using the Oxford colours). + ### Oxford palettes Based on the [University of Oxford](https://ox.ac.uk)’s [visual identity @@ -138,6 +162,90 @@ oxford_theme_palettes()$corporate ![](man/figures/README-oxford-palettes-corporate-show-1.png) +### Oxford theme paletttes for use in plotting + +The University of Oxford recommended theme palettes can be used for +plotting. Below is code examples of how this can be done both with base +R plotting function and with `ggplot2`. + +#### Base R plot + +``` r +## Barplot of cyl and vs of mtcars dataset using heritage Oxford theme + +### Base R +table(mtcars$cyl, mtcars$vs) |> + barplot( + names.arg = c("v-shaped", "straight"), + main = "Engine shape by number of cylinders", + ylab = "n", + legend.text = TRUE, + col = oxford_theme_palettes()$heritage, + args.legend = list( + x = "topright", + inset = 0.002, + title = "Cylinders", + bty = "n" + ) + ) + +### ggplot2 +ggplot( + data = mtcars, + mapping = aes( + x = factor(vs, levels = c(0, 1), labels = c("v-shaped", "straight")), + fill = factor(cyl) + ) + ) + + geom_bar() + + scale_fill_manual(name = "Cylinders", values = oxford_theme_palettes()$heritage) + + labs( + title = "Engine shape by number of cylinders", + x = NULL, + y = "n" + ) + + theme_minimal() +``` + + + +``` r +## Scatterplot of mpg and disp of mtcars dataset using celebratory Oxford theme + +### Base R +cols <- ifelse( + mtcars$cyl == 4, oxford_theme_palettes()$celebratory[1], + ifelse( + mtcars$cyl == 6, oxford_theme_palettes()$celebratory[2], + oxford_theme_palettes()$celebratory[3] + ) +) + +plot( + x = mtcars$mpg, + y = mtcars$disp, + pch = 19, cex = 1.75, col = cols, + main = "Miles per gallon by displacement grouped by number of cylinders", + xlab = "mpg", ylab = "disp" +) +legend( + x = "topright", inset = 0.02, + title = "Cylinders", + legend = c("4", "6", "8"), + pch = 19, pt.cex = 1.5, + col = oxford_theme_palettes()$celebratory[1:3] +) + +### ggplot2 +ggplot(data = mtcars, mapping = aes(x = mpg, y = disp, colour = factor(cyl))) + + geom_point(size = 5) + + scale_colour_manual(name = "Cylinders", values = oxford_theme_palettes()$celebratory) + + labs(title = "Miles per gallon by displacement grouped by number of cylinders") + + theme_minimal() +``` + + + ## Community guidelines Feedback, bug reports and feature requests are welcome; file issues or diff --git a/man/create_palette.Rd b/man/create_palette.Rd index 2bf2bae..c9d89d9 100644 --- a/man/create_palette.Rd +++ b/man/create_palette.Rd @@ -35,7 +35,10 @@ A character vector of desired/required colours with length equivalent to `n` } \description{ -Create new palettes based on Oxford palettes +These functions apply a similar approach used and demonstrated by +[ColorBrewer](https://colorbrewer2.org) and has been patterned after the +syntax of the [RColorBrewer](https://cran.r-project.org/web/packages/RColorBrewer/index.html) +package } \examples{ create_palette_sequential("blues", 5) diff --git a/man/figures/README-base-mtcars-1.png b/man/figures/README-base-mtcars-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a4e294a8143d8fbf43e65c5635cc1695e5f5e5 GIT binary patch literal 13024 zcmeHuXHb-Dw`F5MBnT*opnw<=BuEe?Dk>@>D5;ewB8ng&Inx{kK_z$uM39VR0ZEdB zil`ttXHbzGB-5l>?VXysQ#Ez#t20%1z8}+7rw-LLZ@=&JJbUdGwvVqUpJ$-upd}Cp z3>Pn)RV5HML=gy7eKZ^J&fLTWL;P>+{R`Kv350DQDgRM@wn)51AnYYvJbPN*A#A+c zQ76b~ZT%9W-1_C%sZyXZpDp@+U@h2Cen)M@lSM z`Ei6RA0`mob-wxN;*JuXH%Su++xPWR5uPzoF%sN8XdDQH182)N687?J;KD64PZ0H4b0<>m?>cC}m~Hg@);dgFU$W}|j()WnY)bMCdP#@5@6wbi$I zHc_c{zVMe@Yin(7ZD`2UNYS*Fb@1#>lw8^@-ub#?vz z@wvB@q)%fxSi@-;yit1l1}^dAPP0Q1GR~UDvkMF9ox~7XS8~~38>_3UNA0dfaonkm z&}eY&$iDmg_iz8@fyINLf5dI1-@(R~uu}8pdRBa>`TO_pVOZE_VIw#~Cc7@3y|SYLeXj&P;oZNvqc?k+PRx9Ut$?pZVZP zS5;YQBiTLG|1s!mSB_~gIk0qXE?x0Qi0BJ3DjlHr^hn45BuF`qxZsi@uJIwB1-+h41dcU%xba zzCC~byj9OR759EQR1B;A*w0V-(xt}9w}zj$89faQ<>r->Bavr^Ii>8fv$E)DXkLmK zRpyws(ud8{mNw@sAFQpZ;Sx7dpZQho>gt-H5?SKBU_NkAkF+{>J~C}&fky1;CTV(& zSocIwc^r)y)!%;tDa&vQogM-~7 zpFMkqC+g5h^N7jHvJNdiv+jTLT74N`YC+E2`djR{Qw9wi{pG?K&Z6aud68`MUPWzL}YsNSEoav=5ENLi6%Y#GUCa zapixLDt$FrP}ihB=A5Vb#KeSzd6)354u-9ZBP814;o(X~`M3yawT&e$jdOJ}8yM)Q z7|$e8t&e5ZrX~HX371lo7$`nNQ(s^^>fzzhs!u9*ocX1A$;v9TVQ@URSF_g!PZ8lp zzB||bn(Ur_yKQ-468oq?Qy+i%)nw_q?Ed{{TxYaOT$VQGUT{pXv$pQcF#NpGOOkUX z+r+JZ|MYault~`vKUF8+YHp-iSy@@JD*B99Ae&iJ;@?akT3hW0Yr?S#yN};{*}x+% zuEBoRRm#rFO7X&lD-->yTCz(&1OBWc(}((c%jRSaZqkZn)eC{<)?)ify~g;WUP1m0s8A+BNogHqJ3^yNXN;0|j&bVHlbV(!j zyuYSo(R3xh^TNdHXSua#=`dk~2Rx1DI5F#LyHLRm(_PlJW<5pM*MDgq?Bg~n;3_yD zWx&&Cz$@OzeL?1iYLAo{$7KbDM-4F*OV1Bp3fyU7VZr0!<>h5Xqphcx##Kk;o@%CF zZYJs;pebW3g=&dkdC?9VOdwz3!)$P)L^iGFsz(}G{Xq-?S)U+wNm>t8-rCpu9o zTIy+ybf3mMbNL12))r$$ZkM{PqUvXA<WrI-IPD^eW!R?R z`Sa}uXFQlfLP8|N)AI82EPqtUd)tk7u;&Rp`sUB!i{r7jQQ~c0URy(hD$Q>%xs}s0 zOQm;exdyK9IIOI$l`MBIGB`Lv|78piN1g_2aVEa|nS1)Lgl9oPabX;fy}hr{(a_PU zk$I`~M~6jj`Jeju;q%X_Yk36)$rfF@g?1V{pFDl)$#m}AIbh~a`LpNG^H1h;_$sVl zNw@n*0d>c`8}Au% zrIi&eBO~!eXZGD#o#!V=Yc2wOL~*kYF%c2f>*k&B%o3EtJ(%QHrXDig{Q2c?#pQQq zogPe5_7g1fHbZsMxHk>oL&@Pi9KRP9h<=*|1O$Stx!l~`D)nt!T3Y=4{9+nb)UyO0 z)%xe;%wd(et~Gelu>}?mK4Rof)03rPV6e5eZX`V(Inw&UlWD|Xl_mq%Tv=IJU!5ey zyld1uEiUKTn4rSnnG!*h^!6y1K>>a5{<O;aJpg&L&m6(=9Xf=!o}@*O?OB98{c#=@e`C2;H*rOQ-K4>u;T3F&p=WVWPg zN1m{hFMXAtpYODq_aV-Rr@U~oWOQOe_GY>Fxu-kF+cIK5%v}xIet>VF$<*B3e4LNe z_mYc?OWu2I>|VHXYoWab8yg!>IhIH9(xsr~x3fZ?(pSVAwfAEgSheomyO&H-6z{yb zxN_p;NsYXQbk((ZmeLv*PqxZ$-(0>NTD4;`GH1oEqJdmB-<#N-O}w&NqUOjSSQ@78 zFQQ95!EDS+oncjZ5x)_^yTbn*IGPyx_XmxXv zkIs@O{SnpG05KsU6|vfTWt2fVHb_?fIX^ov^7Cy2` zdgN7MVWHL2Nqj+b_7%B9MAMP$b!rL9Nxt|x-2$6o+!_CZoa6M*hB(x$u8DyG^Nt-^ zsDy9dlm_N=@gVGrFCCUSFA+ELk>paw32E zd;e!2_ADTxMaj}H<`k6V!pzJvSeTy6?{nwRp9j{1F7WkghyXt;S1o!=WK3I*@|@Mu z>Ugl3ZftC9ZJ~61U~rI*hmZ6!nGY*bDK9VoAS-Joh@W`V&@kvl<@wxNa6GUgGcz-N z#{t%X+6@CG6QP=E7PCY3>7{E0;o-VCrq{2BNX9e8pg;t)vh!S)rhzf%s#REsEy)@w zI9%9QdjP?H1)men^JD0d+?GnN8fI0o-~1~pDsE5z{8|+(MA7Jv}`eF0Xp0lFRp>_v3YKVx%*= zbBCCxnJVit#MZ4YI)?MbPfE4FcJ12Lt5*lAkMQ%4f=3T9WMpT*Nv76~TduISwr=FfynNJW{C^c-fS~NK#4-D}1hcrCuG7ES9R}uj5urXsnKq(bf%$h|sHMY<)JI z>hdBEl|jymUY-*qmzABe4XYGT{B81-r*pb)DM^Q9 zyC3~we1klVoLnjXm|bL?+O7UFV2+hvQ{BOKj-!Zta;!#Iy*bxzvtoQ9SXPaSsF=65A;ta-nf1H z#mkqJ9Zb_LEXdEle*LUmq=^{A;s>0?CB{%M@lcA@4)s3slDI2 zb!%m66)hWEaJZDc!r8ONIUP|^Q6MU$+4}Q2DLTz1uFE)&k32khRg#3`7w2p;nD(7G zacy`|_w6_g_it3k?Y|YkM25U+M-~qm7IF zsrlz|g&Dm1ihw6o9uI}se(P^@5AS+i1W(!o*z)!BtEs9|Q@Ksc1I5O*s^`Re+^plZ z&c~hd(sNB}8oGlD-S`Ss8i!q{pT&aboFxig6J z;;q`YZ5#F}b@=I_0|!n>Nwvo7sGWm{p!5ZT80zJQg@v5`L>D@Kj!Co0_wvWMDKQrh z2r1N^TnX)N+L9q^!VSJ{drrKy8E$~=c)a59GT+w&|9 z2P!}w>7Ew&6ydgf6%6m*z3ye$BH#xTBmR3_u--^VPD<#+ldU@rd3bt;OWK;Cj{$YB zbWVcIXWwl^!4Y?zO=(U}7%DC*(oEA~=i)NId$%3G0!Nlav%RjNt}f;{eM^Y)N>5Tt z*vZB=$~awro_q6_EuHP{o2jYMx|PlB?d^NR5?Q&UqwfK;sW#&sqobky zG*2}Fg)gDoc z=iT@sFc4pMF1CJ;jMFT5NhCyNq^zq4Q(9WumTh|yU*#v#?Rk%5^x=#}5Su(bm$U<( zTizQy`E`7}ABXrzw8~>2AGH2Tt5c`kr}@0LaWGH1yh%;Qc*}-3!*cwz9+~sKX?0GuhK!T`h3({D-VhZ_#WD6W#xnW?ESH8m|3`HnO3 znNcnrYoMJ4y{eP_5~9ncL-e$?iWe__t*YwGw@!HawCb(FN9cOuLo>H9%2`bE_V<@_ zS)A&$C{699$RYGg^t%f*2Dfh?zu#9jH`+>?YbHJli%f^+zM!Yq1O6T8Wn^S@@#4iw zs~b0>a&l~8>vWtve*7IsQ_z-+N=o!JG`xI#nK?NOjEwp@CK_mr3JMCTDaqPhx3&<3 zS^N9@QO|ylAGd?*I5^~mgtViBJ`cc~5nU-np}5*-JZCi1^~@|R()CWKdt$SI&%PYu ze1d{$K#mk*x*#8)s^&>4sn6x*N+BW#4VQU=$$5+rv+^+tq zsE;nq6;TV<%xL1QK8T(9n7q4WKuE~&=xCwq^1QbQO+vQ5G{!yWWhiC|O!Vb>PlkHiD_wFr&aoLt5Mu2@A zW$^axTZlt(J5~nj$UlwlUo&-u3aAKT_b$CSnt#7ve$JJ=FsUEAuJ|0KSgk-7AkTk1}CrYx8uK5RrTqhILFjOMp=rx7k1Lxg9+3IL|Ql3 z9M!zal~db+KDto&f+Sac2@1JuZ{Q3osJi5xI94GvyScXU;zk_0UYUx9HNiiBZUn$!_?mb0gIn{SMXQ1!>L#SK)s)9ecLg_opYN)s=SlF2}XFQoeH_<-0 zr0m8Z4g`)KeP`Y+iPC_?I(PQ$u0kb(`w^@A_jm0PO(DxdRf)Qk!J%|pB^OV9pi3_y zo4_DhnCx8#i7T(D(9+V9)ry;|Jg`Bp7l?RBIqc=LXHn8Vetz#VGhw+<&LX1?%veco z(PPJs2@0AoO%D*$_2w29^z*F-unr?D8eIGVC(fk{$;im?@hO%b+_&$$7q^?RrVPQo zH(J4$16(E&Ylf46eh-hT2x{5xs<@#Q6*m*p{o#g#t1k>c`#Cx|>`Fm2!Ld(m>tb75 z8%VQqsMy!`cE|S*Hdlr}fk*f85d-8BX(TDZM|Up*na3A(9`=GQf6_O)eH&2ACF_ES zV4*F;5L|c!LfFNnD8qCUA&TeNV|Q*b<7aCh;mU$#@OXgO0;Zf6Cd~TS=+LLsmm*1A zLzO}Na3_b_GJfpWq$9WwW6#pdzJ2>vS*b|V|NVOdI`=7sA;4wkDd8wtkOurqD-U*FdxSEh$l zEiMH=>^>t$9@_u$a}i3{*w`34VEgv%etS-e7*^1qKmQpx*L<#cuKd7;68s3;6^{2a z$nJ!M!Hvr(Aonc|!#372Yd?FkEj2iw`>jlsa`@%nYZrlxfp5*vpTcwI(H?1s`!E?d zx%ke(E;~wjDJ3+@%wFLlxPKl2&x<6jEunS;rAj=R9zT8zPgTNPL)?f@-^S3~T-Igr zz9Er{;GSnSps1&(2Se@BrAu%CU02DrkW&-`u`n(4SP*Pn`dz{|dWsw?(l!vLob6G_ zJmsXd8E!lXbRs?r#Ei?JIu`A|Fgxqx<0EFrio;ci(&H(g9;gB^)6&s_dO1TKAo|%& zxokAjtuhwl94(%51Wl7uQ}>;nm(hNTSEj4b8LMk+CG75sp8^<6?M5BSd%qCSP8RqR zk3eATN_nld7l(h*7jMh{F5iI@tgek_v1iX7tsE1h@??|B1G0x8DpEsUy^<@v9bnX~ zudr4XUf92py4Cm_PVh0q3fT8@YlxE;CP_2Z67bLN^{uMyhqE~u$BriCa z=v%Qz)+J9lLHpgkcB#ptAA^Irx2r?%M7qv1n}}^dgR6Th6E8Xl8v*8X`Hx-sZrH(* zi|F8~+PM_sZ&>|GBKO_9<94hRbW3DJf!kYIiP*88svfqXGV8z|RkYbQ?V@6gl7*<# z4t*7_Kg(#ywxQ{pM1qiu5BmUshM%9=7rzpE!i2V zm&Ypr&}6I&H3NrwVZv@C4Fu!12)*BT9WOri42e(PmOB|df0u2lVk%LKKEgR=3Ml+a z!r~CtGm#iKFhHU+NzKVfPX0*BA_?-gHsAi4IlZvJ#mCR@>@ni=$Q1Z4-PXYATrC!Q z=yK?;!eePi*5ZcD2T3Kd z@7_Scu9D}ze*FsOD16gET>j7bFf7hG}~5k!`a%qAuAlYWxJkIfDiY4=#X0cXxL$&koNdYP1Ob+0RwesYnZ! zof^G|>pteVJvqktr;pREKU_EDgmWH2iGK`TAAkOAW}3Ko`^ zuU?tvXc@L{Ae=g5#CLuQ6mw>o_R5DUF5~BV(_IUr| zkI()K5NTlG@Cq#&<9%aeW0e!CYHQ`d=8;+f5K*uZF4GqcgSTRj47O9r!5*ort9$+W zfVOrgZ3@otaYU220!)}H-W)1I9aBj85i7`P+3_y5~WGVQB7;)JP~6{upR!8`;yG2uCJ$fQi>05?| zKZb{w%48`7_7VE;BvLTAk=L%hR8DXnipIMRylVN>7XPWe98mgBqj&5^89`rP|4+Z6 zSK{ph8A&N1FcJtRP?%P?wlqN`sy{G|+fy}12L~~t@N0a0^%I-^t_*Ai$3A=rzE~I{#_P%# zF1(a+o(JuQ;t2a=o*e`8hQYHdS010;2{Z3X{r`zZL*fgY8=#E$9%7q9R&Qx(Nftl| zgNQqWrxprl-MUtW*xZ3UNpNH%!R@e;U>^i5`poNItFg9YjEszDB05pmlqfU@Iwcxj zioX^&Nbp}tn_Q4Y+`M@cQZ+0*oDHrFE9=1MXiDSoaU365+IJ!xE1sPOkh!?Jrf8X( znd#ckZ6MreP}WFQg?XoGRP>6Kp*}P-oG!Oa2d$S#8KX{yyAS zcQaxC-adx!0|TrrEf&>uXa4-@dRHbtG;^BdS3@# zErD$(hJ5($JTNeTAKjUmrl|9w{O#p*X|?k@{-C~~O&ZVO|60@W@$Q=Z;cUOuKWiEp zUfdLac{d=pj0Q2lKb|rRSQaG1ihl551G1%5P17+g9GgU?0UB9;ep5JRB_$;g!V!12`pXw#J6jw);X{_2NGprKF$8ejwB-$g4zrGIOB(i>MHc(Zp5#Ii=>`Z{b!~w&#IM z{i!KQ4V;95Js~Qp53&@;`7cxL9Fu|J>s67eXx3zZ4vd576(($~Xz1*c787e~)1cw; z2nuR`)1HMPpg-%J>Ny0B2!hUVS;O*Lq@?}Cp6%N+Z+?2RB~AD3jrT+()V=F#xe+NF z2vPl%9{azOkpGf+`1N@*VQxXYz~-)&R;XL-AKvi_{Tv}}1}%sdk4TU^5sFEuy}ccN zsyq!$PoNPjYeTlp&<2KDApe9Bk0h6RO2a$zuNhDO_k)K`TVUaXes%H+g+F`Nhq;2l zU}}@`^2a;iz9$W5L8i5&=`PoqH;?(}IP1PV1Z>9r8N=AZY)DV0(IwxA=28;L!eWw4 z!ml@Q#VdpG1P8x*^=fw^Q`r|qMMW_VUj#`SoPg15k#l9`mQT1CB{13*6}5LRS~+26 zb~fy|nbtrAtWFdtl%sf5Z!dQa=JtD4DiU}h4^(GzJ!*FWRd;;e`eE9J4VO1r(V`F8# z93kCaMR}P*?BWWxQoB!aI`s)QqCLRkg?(x&77BrzUsz~?KoBki)Gc;TV_Za@2D~pK z2I)tn9H|6fmYcf({{*r5r_&FqlhT*VRx>_~wk+R@N*i|fTAFQC@npihjV6~H_>jE! z`pTdjYe9Fu_2=g19Han{$x0V47(=(i_|2?rY;0_9wnajUU%8H^=AtXz{`NBZ4F;~> zYNqIB-nyu$SlPQaFTqp(h+#MAri$F^0gtyiIpM+v@>W*U2$jS*s#DTSFqDO87Ll`$ zuWxsWt20LE6k@OETg7E!H02Fa5G0zn(eR9o6N`(B0|FWiBY2{YCwCZ`_Y|FkE$Hp- zjX-gF+Dbwq7qJ%AM(P8H4xw4)ChICBG-6)IraDx-a@vPoG+WCI(11%JwMTrQk$mcc8O1a@ySk(a$R@GZPZ-ppu&+ zpcxn#7&KmZ(X(e_9@19h)TuIvf5z@~DmmDaw#|?#oO|}r($bpumUQD`F$8&8SKQ#k zCd|TMdJ;p7JZBXZpET&{=#2IEpDz0-rjb?U!zH6tZHNbfeU|cAyIC-{k!}&Eou8jy zd=W!C81#tdp3)fiC#OGs=qF4kq(I6q$=PlOz6sKHhq_4cN<=Vabv#cCKM42i=#q9L}%Das=9C-?->~MV+c(d z77mO}u-dK_4ctSTerZHdkS&bQRL$L-oT<{EIy#)%-Wu3S>^P;H>=s=AAH%(Y10(kA zpZY&~A!TXejE46`Cbpk#UfzF8zU<@PGmq#mUb@78^r*Dkii3he1vrQY6Qb_aUqryY zS<9PtAiRrnx{CPt9Q$H$uy z4YI9nbFrIUaCi4QO&Qf}94=WSk76hYM+(yqJZGVNYSv7U+R1x^^F!Ex9bp2XATJLR za17pYCC$ihuM&z{!?A^?$GjA*Q_6|U9`eg^BD<)=N&cI+KsbzAiY?b*r5_Kl5 z{mz~95SE7y9z5bTDen#Ib@NIkU>n}z-n~(YiC>UfNK3mQBf)mFv$HqTJ44pOoWhKR z+Q}kbLBSH6;pc8%m_kje8f{Id$g&+O(#*Sd8Jn4fhlVDnJ@NIW_?1li4jecjBxC`g zQgjC6Q&m;vtfsp1nd`G)EDbHKh=fFMfo;mPu!ID~jP*C%aiel^k2JkFB701>bOCnD zy_p%uVBLGcUB!t|2@#2V`}RJ@_W+?7xNY{q5Q{04Q$F_o<+1%hELqtSG*Lu#>WqbI zs;ZFpJ6Tz6F~fz8#AIXw5*&H&moHx;B7%n9w0ScoDg~}*{!Gp7*)Bgj(u|XJuPN~= zm^Tv8YsF4EYp3aNs3x}?VFF7CQzpPI=+7a!xKQ1A_yH!l@CN+gRs%wjao@%00o>%Q ztSl#vC=POZRj`VfLq%Q|BSQmr4p9sR8;OmF#l>@=jA2^fIp8BnAw+GMfS_&Bwn*v* z&R|d>=_m=gD-{(LK7~hx>gRTy{aZ5y=B&m;w9UqeKuesESve;EUdBKFZ~-6t|DyLFtiaGZm0VV}y=>vvuW}- G9{dlcsSgkU literal 0 HcmV?d00001 diff --git a/man/figures/README-base-mtcars-2.png b/man/figures/README-base-mtcars-2.png new file mode 100644 index 0000000000000000000000000000000000000000..4579e0a022d41638626992564688b2cbcd871288 GIT binary patch literal 7818 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 z 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 literal 0 HcmV?d00001 diff --git a/man/figures/README-mtcars-barplot-2.png b/man/figures/README-mtcars-barplot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..2500044b09ec11f0d08ee77ec53fb4cacdc500f2 GIT binary patch literal 12735 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 z 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 literal 0 HcmV?d00001 diff --git a/man/figures/README-mtcars-plot-2.png b/man/figures/README-mtcars-plot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..2500044b09ec11f0d08ee77ec53fb4cacdc500f2 GIT binary patch literal 12735 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
m)kUWu+B#gl#-W;lj)s~$~W6M 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 literal 0 HcmV?d00001 diff --git a/man/get_oxford_colour.Rd b/man/get_oxford_colour.Rd index 33b6644..bdbddec 100644 --- a/man/get_oxford_colour.Rd +++ b/man/get_oxford_colour.Rd @@ -5,9 +5,17 @@ \alias{get_oxford_colours} \title{Get named Oxford colours vector} \usage{ -get_oxford_colour(pattern = NULL, model = c("hex", "rgb", "cmyk", "pantone")) +get_oxford_colour( + pattern = NULL, + model = c("hex", "rgb", "cmyk", "pantone"), + named = FALSE +) -get_oxford_colours(pattern = NULL, model = c("hex", "rgb", "cmyk", "pantone")) +get_oxford_colours( + pattern = NULL, + model = c("hex", "rgb", "cmyk", "pantone"), + named = FALSE +) } \arguments{ \item{pattern}{Optional. A character value or vector to use as a search term. @@ -15,10 +23,14 @@ Default is NULL in which case all the Oxford colours are returned.} \item{model}{A character vector of colour model. Can be "rgb", "cmyk", "hex", or "pantone". Default is "hex".} + +\item{named}{Logical. Should the output be a named character value or +vector? Default is FALSE.} } \value{ A character value or vector of Oxford colour/s as per `model` - specification + specification. If `named` is TRUE, returns a named character value or + vector. } \description{ Get named Oxford colours vector