Short answer
Map the data to lightness: light for low values and dark for high (or the reverse on a dark background), in steps that look equal. Hue can change along the way to add separation, but lightness has to move in one direction without flat spots, because lightness is the dimension every reader — including people with colour-vision deficiency and anyone looking at a greyscale print — can order without a legend.
Ask people to sort a set of greys and they agree; ask them to sort red, green, blue and yellow and they do not, because hue has no natural beginning or end. A sequential scale therefore has to encode magnitude in lightness. ColorBrewer describes its sequential schemes as dominated by lightness steps, light for low values and dark for high. Crameri and colleagues list 'perceptually ordered' as one of the properties a scientific colour map must have, alongside perceptual uniformity. This page also covers what the site's topic plan listed separately as luminance ordering: the rule is the same whether the scale is a heatmap, a choropleth or a scatter plot coloured by a continuous variable — if the lightness sequence is not monotonic, the chart asserts an order the data do not have.
Order is necessary but not sufficient. If the lightness steps are uneven, a region of the scale where lightness barely changes becomes a flat spot in which real differences in the data disappear, and a place where it jumps becomes a false edge. Kovesi documents flat spots in vendor colour maps large enough to hide a feature of about a tenth of the data range, and argues that uniform increments in perceived lightness are the most important property of a good map. The first table measures three nine-step ramps. Building the ramp by stepping OKLCH lightness gives nearly equal CIELAB L* steps. Building it by stepping HSL saturation at fixed HSL lightness — a common shortcut in design tools — changes L* by only about 8 units from end to end, so the scale is readable only by chroma, which is exactly what colour-vision deficiency and greyscale printing remove.
A single-hue ramp (pale blue to dark blue) is the most robust: it is ordered in greyscale and under every colour-vision deficiency, and it cannot be mistaken for categories. Its weakness is resolution — nine or more classes become hard to separate because only lightness distinguishes them. Multi-hue sequential scales such as viridis add a hue change on top of the lightness ramp, so neighbouring values differ in two dimensions at once. Smith and van der Walt designed viridis to be perceptually uniform both in colour and when converted to black and white, working in the CAM02-UCS space, and it became Matplotlib's default in version 2.0. The key is that the hue path is chosen so lightness still rises steadily; a hue sweep chosen for prettiness, like a rainbow, does not guarantee that.
The convention 'darker means more' is a convention, not a law, and it is tied to a light background: dark marks stand out against white, so high values get the most visual weight. On a dark background the same logic runs the other way, and many dark-mode heatmaps reverse the ramp so that high values are bright. Choose one direction per publication and state it in the legend. Two further details matter. The lightest step should not match the background, or the lowest class vanishes into the page; stop the ramp a few L* units short of white. And the darkest step should still be distinguishable from text and outlines drawn on top of it, or labels on high-value cells become unreadable.
A quick test of order: convert the legend to greyscale. If you can still sort the swatches correctly without looking at the labels, the scale is ordered.
| Ramp | L* of each step | Smallest – largest step in L* | Smallest neighbour ΔE00, deuteranopia (simulated) |
|---|---|---|---|
| Single-hue blue, OKLCH L 0.95 → 0.31 | 94 · 85 · 76 · 67 · 57 · 48 · 39 · 29 · 20 | 9.1 – 9.5 | 6.9 |
| Multi-hue yellow → blue, OKLCH (hue 100° → 265°) | 95 · 86 · 77 · 68 · 59 · 49 · 39 · 30 · 19 | 8.7 – 10.4 | 5.9 |
| Saturation-only ramp, HSL hue 220°, lightness 50%, saturation 10% → 100% | 52 · 50 · 48 · 47 · 45 · 45 · 44 · 44 · 44 | 0.1 – 1.7 | 1.8 |
Why: The ramp starts at, or very near, the background colour.
Fix: Start the ramp a few L* units darker than the background, or outline the areas.
Why: The scale varies mainly in hue or saturation, so its order must be learned from the legend.
Fix: Rebuild it with lightness doing the ordering, then add hue if more separation is needed.
Why: The colour map has an uneven lightness step at that point.
Fix: Use a perceptually uniform map such as viridis, cividis or a scientific colour map.
Each statement is labelled by kind — established fact, a standard’s requirement, observed market data, a convention, or Colourwise’s own interpretation or analysis — with the strength of the evidence behind it.
ConventionStrong evidence
ColorBrewer's sequential schemes are for ordered data running from low to high, and are dominated by lightness steps with light colours for low values and dark colours for high values.
Source: ColorBrewer 2.0 — colour advice for cartography; ColorBrewer.org: An Online Tool for Selecting Colour Schemes for Maps
FactStrong evidence
Crameri, Shephard and Heron set out perceptual uniformity and perceptual order, together with readability for colour-vision deficiency and in black and white, as properties of a scientific colour map.
FactModerate evidence
Kovesi reports that many vendor colour maps contain perceptual flat spots able to hide a feature of about one tenth of the data range, and argues uniform steps in perceived lightness are the key design property.
Caveat: Reported in a preprint; the one-tenth figure applies to the specific maps examined.
FactModerate evidence
Viridis was designed in the CAM02-UCS colour space to be perceptually uniform in colour and in greyscale and to remain usable with common colour-vision deficiencies, and became Matplotlib's default colour map in version 2.0.
Source: A better default colormap for Matplotlib (viridis, magma, inferno, plasma)
Colourwise analysisStrong evidence
A ramp built by stepping HSL saturation at fixed HSL lightness changes CIELAB L* by only about 8 units end to end, so its order depends on chroma rather than lightness.
Based on: Computed by Colourwise from the CSS HSL definition and CIELAB; see the ramp table.
Source: CSS Color Module Level 4; CIE (International Commission on Illumination) publications
Reviewed 29 September 2026. Colourwise summarises its sources in its own words and does not reproduce standards text or proprietary colour data. Spotted an error? Tell us.