A default colormap can change what readers see
Source 00:28A colormap assigns a color to each numerical value, making structure in a field of numbers visible. But the mapping is an interface between the data and the viewer: if its visual changes are uneven, it can draw attention to boundaries that do not correspond to equally important changes in the data. At SciPy 2015, Nathaniel Smith, presenting work with Stéfan van der Walt, argued for replacing Matplotlib's Jet default with a map designed around perception.
Smith described a user study of a heart-disease imaging tool: doctors accustomed to Jet reportedly took roughly twice as long and made more diagnostic errors with it than with the better maps in the comparison. He speculated that such defaults might have killed people. That was his conjecture, not evidence presented in the talk that Jet caused deaths; the talk does not establish clinical outcomes. The slide identifies the study as Borkin et al. (2011). Watch from 00:58.
Smith considered MATLAB's then-recent Parula a substantial improvement, but said it was unavailable for their use. His team's response was to design an openly usable alternative.
A general default needs ordered, legible changes
Source 02:42A default must work before its author knows the dataset. Smith's starting criteria were that it should be colorful and attractive enough to use, sequential, perceptually consistent, readable in black and white, and accessible to as many viewers as possible. A sequential map represents an ordered progression from low to high; equal steps in the data should produce roughly equal perceived changes.
This does not make a sequential map right for every task. A diverging map can emphasize departures on either side of a meaningful center, while a cyclic map can join the ends of a repeating quantity. Those choices assume structure that a general default cannot infer. Watch from 02:42.
Light is compressed from a spectrum into visual signals
Source 04:00To design for perception, follow the chain: data becomes RGB values, a display emits light, the retina responds, and the brain produces a visual experience. Smith presents this as a useful model, not a complete account of vision.
Most light is a mixture across many wavelengths, describable as a spectrum with an amount at each wavelength. A nearly single-wavelength laser is a simpler example. In the talk's simplified model, three cone response types, sensitive to long, medium, and short wavelengths, turn that high-dimensional input into three signals. Different spectra can produce the same three responses, so their differences are lost in this representation.
XYZ explains both mixtures and display limits
Source 05:56CIE XYZ provides coordinates for a three-dimensional color-matching space: a point can stand for many spectra that produce equivalent responses in the simplified model. Because a physical spectrum cannot contain negative light, only part of the mathematical space is realizable. Smith shows a slice through the resulting cone to explain the familiar colored shape.
The mapping is linear for light mixtures: a mixture of red and green lights falls between their points and can appear yellow. A display similarly mixes three primaries. Their available combinations define its gamut, the range of colors it can produce; a path outside it cannot simply be displayed as intended. The encoded display signal and emitted light are related nonlinearly, a separate issue from nonlinear human perception. Watch from 05:56.
Perceptual spaces estimate appearance in context
Source 09:06The light entering an eye does not uniquely determine appearance. Vision adapts to the surrounding illumination: Smith's dress illustration places identical dress pixels in differently colored contexts, where they appear different. Models therefore account for a reference white and viewing conditions rather than treating raw light as perceived brightness.
Smith contrasts CIELAB, a 1976 model intended in part to estimate color similarity through distance, with CIECAM02, which he says better describes properties such as hue but is not itself a distance model. His team uses CAM02-UCS, a transformation of CIECAM02 intended to make distances useful as well. These are fitted approximations, not a literal simulation of the brain or a guarantee for every viewing condition.
Accessibility requires testing more than one view
Source 12:11Smith explains that common color-vision differences can make the long- and medium-wavelength cone responses more similar, or leave one absent. In his simplified picture, this compresses distinctions along much of the red–green axis. A map that depends on those distinctions alone can therefore be harder for some viewers to read.
The team's tool includes approximations of several color-vision conditions and a grayscale view. These simulations are aids to design, not exact representations of every person's sight. Grayscale matters separately: a printed figure should still convey ordered changes when hue disappears. Watch from 12:11.
Compare the rate of perceived change, not just the colors
Source 13:11The visualizer samples a map at equal data intervals, plots those samples in perceptual space, and graphs a derivative-like measure of perceptual change. For an ideally uniform map under that model, the rate would be flat. Its Jet view shows large variation, alongside sample plots, simulated color-vision views, and grayscale.
Parula looks considerably more even in the presentation, but Smith points to a remaining band and cautions the audience to compare graph scales. He attributes part of the difference to the model: he says Parula was designed for uniformity in Lab, whereas their chosen space estimates nearby differences differently. That is the speaker's model-based interpretation, not proof that one map is uniformly best in every setting.
Cyclic data calls for a different path
Source 14:32The same tools can work backward: choose a path in perceptual coordinates, then convert it into display colors. For a cyclic map, Smith keeps lightness constant and draws a circle in the other two dimensions. The end rejoins the beginning, as it should for directions near 0° and 360°.
In the wind-direction example, neighboring colors help reveal changes in direction and possible shear. The point is the fit between data structure and map: a circular variable benefits from a loop, while an unknown ordered variable is a better candidate for a sequential default. Watch from 14:32.
Bézier controls turn constraints into a candidate
Source 15:08For their sequential default, the team favored a blue–yellow direction to reduce reliance on red–green distinctions, and dark-to-light progression to preserve order in grayscale. Smith explains that the available shape of the color space makes dark blue to light yellow more practical than the reverse pairing. Even then, designers can choose a route through intermediate colors.
Their editor fixes endpoint lightness and lets a designer drag Bézier control points—handles that shape a smooth curve—in a two-dimensional view. The team examines slices of the available gamut as it adjusts the path. This brings the desired perceptual progression, display limits, and visual appearance into one iterative design exercise.
Viridis emerged from candidates and a green suggestion
Source 16:40The team initially made three candidates and surveyed the Matplotlib mailing list. Smith joked that making a map quickly made choosing one harder: everyone could have an opinion about the color of the proverbial bike shed. Eric Firing then suggested adding green. Another candidate was designed and the team adjusted it; the transcript does not clearly identify the designer. Smith joked that green had been the missing criterion.
The resulting proposal was called Viridis. Smith said it had more lightness variation and less hue variation than Parula, and that their model avoided the bend he had highlighted. The green suggestion and his preference illustrate an aesthetic decision made within technical constraints, not a universal rule that every map needs green. Watch from 16:40.
The release discussion was a 2015 plan
Source 17:56At the talk, Smith said the candidate maps were planned for the next release and hoped a new default would be selected for Matplotlib 2.0, then expected in a few months. He invited attendees to a discussion the following day about changing defaults. These are statements of the plan at SciPy 2015, not a claim here about what was subsequently released or the current default.
The practical lesson is to choose a map for the data and its audience: examine the progression in perceptual space, check grayscale and simulated views, respect display limits, and use a cyclic or diverging map when the data calls for one. A default is a starting point that deserves the same scrutiny as any other interface.