Learn R Programming

munsell

The munsell package provides easy access to, and manipulation of, the Munsell colours. The munsell package provides a mapping between Munsell’s original notation (e.g. “5R 5/10”) and hexadecimal sRGB strings suitable for use directly in R graphics. The package also provides utilities to explore slices through the Munsell colour tree, to transform Munsell colours and display colour palettes.

Munsell devised his system of colour notation to match the three perceptual dimensions of colour: hue, value and chroma. His notation provides a naming scheme to colours that eases the choice of color according to a specific purpose. His century old advice is still relevant for the producers of statistical graphics and the munsell package aims to enable user to easily follow it.

munsell relies directly on the published tables in Newhall, Nickerson, and Judd (1943) of CIE XYZ (Illuminant C) values for Munsell colours. These tables were the result of colour matching studies on Munsell’s color samples along with some smoothing and extrapolation with Munsell’s goal of perceptually uniform spacing in mind.

Currently the munsell package only includes hue in steps of 2.5, value in steps of 2 and chroma in steps of 1, corresponding directly to the entries in Table 1 in Newhall, Nickerson, and Judd (1943). If you require a more continuous mapping, see munsellinter.

Usage

Functions in munsell fall into three basic use categories: specifying Munsell colours, altering Munsell colours and exploring the Munsell color space.

The code below relies on the development version of munsell, get it with:

devtools::install_github("cwickham/munsell")

Color specification

Following Munsell, specifying colours is done with a specific string format: “H V/C” where H is a hue code (see mnsl_hues() for a list of those available, excluding “N”), V an integer in $[0, 10]$ specifying value, and C an even integer specifying chroma. The mnsl function takes the string and returns a hexadecimal RGB representation:

library(munsell)
mnsl("5R 5/10")
#> [1] "#C65858"

Visually examining a colour can either be done by using mnsl with a base plotting call, or using plot_mnsl which plots colour swatches using ggplot2:

plot.new()
rect(0, 0, 1 ,1 , col = mnsl("5R 5/10"))
plot_mnsl("5R 5/10")

Colour manipulation

munsell provides convenience functions that alter a colour by taking steps in the hue, value and chroma dimensions: rygbp, pbgyr, lighter, darker, saturate and desaturate.

my_blue <- "5PB 5/8"
p <- plot_mnsl(c(
  lighter(my_blue, 2),      my_blue,   darker(my_blue, 2),
  desaturate(my_blue, 2),   my_blue,   saturate(my_blue, 2),
  rygbp(my_blue, 2),        my_blue,   pbgyr(my_blue, 2)))
p

Each function optionally takes the number of steps to take in the dimension and consequently are easily used to create scales in a particular dimension.

p <- plot_mnsl(sapply(0:6, darker, col = "5PB 7/4"))
p + ggplot2::facet_wrap(~ num, nrow = 1)

Colour space exploration

Slices through the colour space of constant hue, chroma or value can be displayed using the functions: hue_slice, chroma_slice and value_slice. Additionally complement_slice displays a slice of constant hue, alongside a slice of its complement, the hue that is on the opposite side of the colour sphere to that specified.

complement_slice("5R")

References

Newhall, Sidney M, Dorothy Nickerson, and Deane B Judd. 1943. “Final Report of the OSA Subcommittee on the Spacing of the Munsell Colors.” JOSA 33 (7): 385–411.

Copy Link

Version

Install

install.packages('munsell')

Monthly Downloads

1,022,093

Version

0.5.1

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Last Published

April 1st, 2024

Functions in munsell (0.5.1)

darker

Make a munsell colour darker
munsell

Munsell colour system.
mnsl

Converts a Munsell colour to hex
plot_closest

Plot closest Munsell colour to an sRGB colour
desaturate

Make a munsell colour less saturated
plot_hex

Plot hex colours
rygbp

Change the hue of a munsell colour
pbgyr

Change the hue of a munsell colour
saturate

Make a munsell colour more saturated
hvc2mnsl

Converts a hue, chroma and value to a Munsell colour
in_gamut

Checks if a Munsell colour is defined in RGB space
value_slice

Plot all colours with the same value
fix_mnsl

Fix an undefined Munsell colour
theme_munsell

Default munsell plot theme
plot_mnsl

Plot a munsell colour
text_colour

Get text colour
seq_mnsl

Generate a sequence of Munsell colours
rgb2mnsl

Converts an sRGB colour to Munsell
hue_slice

Plot all colours with the same hue
check_mnsl

Checks for valid Munsell colours
chroma_slice

Plot all colours with the same chroma
mnsl2hvc

Converts a Munsell colour to a hue, chroma and value triplet
complement

Find the complement of a munsell colour
mnsl_hues

Munsell hues
complement_slice

A vertical slice through the Munsell space
lighter

Make a munsell colour lighter