---
title: "palettes"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{palettes}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
# Preview vignette with: devtools::build_rmd("vignettes/palettes.Rmd")
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
The goal of palettes is to provide methods for working with colour palettes for users and developers.
```{r setup}
library(palettes)
```
## Creating
`pal_colour()` is a nice way to create a colour vector. Colours can be a character vector of hexadecimal strings of the form `"#RRGGBB"` or `"#RRGGBBAA"`, colour names from `grDevices::colors()`, or a positive integer that indexes into `grDevices::palette()`. By default, colour vectors are always printed as hex codes with colour previews.
```{r}
colour_vector <- pal_colour(
c("#a00e00", "#d04e00", "#f6c200", "#0086a8", "#132b69")
)
colour_vector
```
`pal_palette()` is a nice way to create named colour palettes.
```{r}
colour_palette <- pal_palette(
egypt = c("#dd5129", "#0f7ba2", "#43b284", "#fab255"),
java = c("#663171", "#cf3a36", "#ea7428", "#e2998a", "#0c7156")
)
colour_palette
```
## Casting and coercion
To compliment `pal_colour()`, palettes provides `as_colour()` to cast objects into colour vectors.
```{r}
colour_strings <- c("orange", "purple")
as_colour(colour_strings)
```
To compliment `pal_palette()`, palettes provides `as_palette()` to cast objects into colour palettes.
```{r}
colour_list <- list(OrPu = c("orange", "purple"))
as_palette(colour_list)
```
Colour vectors and colour palettes can also be coerced into a tibble with `as_tibble()`. See `vignette("tibble", package = "tibble")` for an overview of tibbles.
```{r}
as_tibble(colour_vector)
as_tibble(colour_palette)
```
## Subsetting
Colour vectors can be subset using `[`.
- To extract one or more colours use positive integers:
```{r}
colour_vector[3]
```
- To drop one or more colours use negative integers:
```{r}
colour_vector[-3]
```
- To move one or more colours extract, drop, and combine:
```{r}
c(colour_vector[-3], colour_vector[3])
```
Colour palettes can be subset using `[`, `[[`, and `$`.
- To extract one or more colour palettes use `[`:
```{r}
colour_palette["egypt"]
```
- To extract a single colour palette as a colour vector use `[[` or `$`:
```{r}
colour_palette[["egypt"]]
colour_palette$egypt
```
- To get names of colour palettes use `names()`:
```{r}
names(colour_palette)
```
## Plotting
`plot()` is a nice way to showcase colour vectors and colour palettes. The appearance of the plot depends on the input.
- Colour vectors are plotted as swatches:
```{r}
plot(colour_vector)
```
- Single colour palettes are plotted as swatches with a palette name overlay:
```{r}
plot(colour_palette["egypt"])
```
- Multiple colour palettes are plotted as faceted swatches with palette name titles:
```{r}
plot(colour_palette)
```
To interpolate or change the direction of colours in a plot, use the optional `n`, `direction`, `space`, or `interpolate` arguments.
```{r}
plot(colour_vector, n = 7, direction = -1, interpolate = "linear")
```
All plots are ggplot2 objects and can be customized using any of the standard ggplot2 methods. See the ggplot2 [customizing FAQ](https://ggplot2.tidyverse.org/articles/faq-customising.html) for some common examples.
## Printing
```{r, include=FALSE}
op <- options()
```
The printing behaviour of colour vectors can be adjusted using a variety of global options. See `help("palettes-options")` for a list of all the available options and their default values.
For example, to change the symbol used for colour previews, set the `palettes.print_symbol` option.
```{r}
options(palettes.print_symbol = "square")
colour_vector
```
```{r, include=FALSE}
options(op)
```
Set multiple options together for unique printing styles.
- Print colour vectors compactly:
```{r}
options(
palettes.print_symbol = "circle_large",
palettes.print_hex = FALSE,
palettes.print_width = 5
)
colour_palette
```
```{r, include=FALSE}
options(op)
```
- Mimic the appearance of a character vector:
```{r}
options(
palettes.print_symbol = FALSE,
palettes.print_sep = ", ",
palettes.print_width = 5,
palettes.print_index = TRUE
)
colour_vector
```
```{r, include=FALSE}
options(op)
```
Set any of these options in your [`.Rprofile`](https://rstats.wtf/r-startup.html#rprofile) dotfile to have them persist across R sessions on a global or per-project basis.