Recall Munzner’s rankings of visual channels
Color is not a monolith: it has distinct components
Most color use decomposes into three visual channels
Luminance (how bright)
Saturation (how colorful)
Hue (what color)
Different channels have different properties - what they convey directly, and how much they can convey.
http://www.kennethmoreland.com/color-maps/ColorMapsExpanded.pdf
Most platforms moved away from rainbow color maps around 2015:
jet
)jet
)On Matplotlib’s color map change, and the process for constructing new colormaps
scale_color_
or scale_fill_
scale_color_viridis_c
- continuousscale_color_viridis_b
- binnedscale_color_viridis_d
- discreted3.interpolateViridis
Color channel interactions:
Saturation and Luminance:
Aim for maximum distinguishability
Use hue as primary color channel
There are a few options available if a cyclic colormap is needed.
Now it gets complex.
…and accessibility.
The retina has 4 types of photo-sensitive cells: Cone cells (L/M/S) and rod cells (brightness detection)
Tetrachromacy has been observed in humans, seems to lead to increased ability to distinguish color.
But a lot of human vision happens in subsequent processing, and perception seems connected to cultural color systems.
Oliver Sacks’ The island of the colorblind describes a culture with very high hereditary rates of monochromacy, where color naming focuses on texture more than hue.
Redundant visual channels admit information even if perception of the visual channels is imperfect or lacking
Putting coordinates on color.
…or at least human color perception is 3-dimensional.
Color is perceived by cone cells in the retina. Incoming photons have an associated wavelength, producing some combination of stimulations.
This implies any complete color representation needs to be 3-dimensional.
Combinations of wavelengths crucial for color mixing, either additively (with different colored light) or subtractively (with different reflective inks or dyes)
Additive color space, standard for digital displays.
Three color channels: red/green/blue
HTML hex codes are structured as #RRGGBB, with each hexadecimal 2-digit portion encoding an intensity value 0-255.
Poor for encoding (major interference between channels)
Poor for interpolation (middle of cube is grey)
Subtractive color space.
Standard for printing.
Repeated attempts at perceptually linear spaces
Hue, Saturation, and either Lightness or Brightness
Color coordinates based directly on cone cell responses
Entire light spectrum convoluted with each response curve to form coordinate values L, M, S.
Color conversion usually goes through CIE XYZ and a subsequent linear transform.
Can be used to simulate color blindness.
Linear Interpolation is an attractive option for magnitude-representing color schemes.
Choice of coordinate systems can dramatically influence results.
Distinguishability of steps is perceptually connected to lightness, and gets muddled when the lightness progression is not linear.
…and their interactions with perception.
Different languages divide the color spectrum differently
Discriminability depends on language (Witzel-Gegenfurtner (2015) - barely discernable colors recognized faster if they straddle a color word boundary)
xkcd and linguists/psychologists study color with very different methods
Colorblindness Simulator
Python
palettable
- unified access to large families of color mapsR
colorspace
- can simulate greyscalingdichromat
- can simulate color blindnesscolorblindr
- can color blindness simulate ggplot objectspals
- extensive palette collectionkhroma
- palettes and tools for color blind acessible designggthemes
- mimic very many distinct looks (incl. WSJ, Economist, Excel, Tableau, …)