Tol (2018) offers carefully chosen schemes, ready for each type of data, with colours that are:
All the scales presented in Paul Tol’s technical note (issue 3.1, 2018-09-23) are implemented here, for use with base R graphics
or ggplot2
.
According to Paul Tol’s technical note, the bright, contrast, vibrant and muted colour schemes are colour-blind safe.
The light colour scheme is reasonably distinct for both normal or colour-blind vision and is intended to fill labelled cells.
The pale and dark schemes are not very distinct in either normal or colour-blind vision and should be used as a text background or to highlight a cell in a table.
The qualitative colour schemes must be used as given (no interpolation): colours are picked up to the maximum number of supported values. Refer to the original document for details about the recommended uses (see references).
Scheme | Max. colours |
---|---|
bright | 7 |
contrast | 3 |
vibrant | 7 |
muted | 9 |
pale | 6 |
dark | 6 |
light | 9 |
If more colours than defined are needed from a given scheme, the colour coordinates are linearly interpolated to provide a continuous version of the scheme.
Scheme | Num. of colours | Bad data |
---|---|---|
sunset | 11 | #FFFFFF |
BuRd | 9 | #FFEE99 |
PRGn | 9 | #FFEE99 |
If more colours than defined are needed from a given scheme, the colour coordinates are linearly interpolated to provide a continuous version of the scheme, with the exception of the discrete rainbow scheme (see below).
Scheme | Num. of colours | Bad data |
---|---|---|
YlOrBr | 9 | #888888 |
iridescent | 23 | #999999 |
discrete rainbow | 23 | #777777 |
smooth rainbow | 34 | #666666 |
As a general rule, ordered data should not be represented using a rainbow scheme. There are three main arguments against such use (Tol 2018):
If such use cannot be avoided, Paul Tol’s technical note provides two colour schemes that are reasonably clear in colour-blind vision. To remain colour-blind safe, these two schemes must comply with the following conditions:
discrete_rainbow <- colour("discrete rainbow")
plot_scheme(discrete_rainbow(14), colours = TRUE, size = 0.7)
When using the smooth rainbow scheme:
smooth_rainbow <- colour("smooth rainbow")
# Start at purple instead of off-white
plot(smooth_rainbow(256, range = c(0.25, 1)))