LANE 05a / DATA-VIZ · NORMALLED

Data-viz & scientific palettes

This is where the science lives. Editor themes borrow from these.

Okabe–Ito “Color Universal Design” (2008) — the canonical palette

Masataka Okabe & Kei Ito — both strong protanopes themselves — via the NPO CUDO they co-founded in 2004 (palette page, colorset). Designed to be unambiguous under all three dichromacies: no yellow-green range, bluish-green for “green”, vermilion instead of pure red (dark red ≈ black for protanopes). Ships as base R ≥4.0’s palette.colors("Okabe-Ito"), underlies seaborn’s default, and inspired datum, Blinds, and half the editor themes above. Free with attribution.

Okabe-Ito palette under CVD simulation

Designed for white backgrounds (print); the pure yellow #F0E442 is nearly invisible on white — base R substitutes amber #F5C710 in its default variant. Not a dark-mode palette.

Paul Tol’s colour schemes (SRON) — the most complete family

Paul Tol, SRON — technical note SRON/EPS/TN/09-002 (issue 3.2, 2021). ~16 schemes (qualitative, diverging, sequential), each tested against protanopia and deuteranopia simulations using CIEDE2000 differences, with the simulations published on the page. Highlights:

Tol bright

Tol vibrant

Tol muted

Tol high-contrast

Also: medium-contrast (pairs survive grayscale), dark (every color ≥4.5:1 on white — the one to use when WCAG text contrast matters), pale/light (fills behind black text), diverging sunset, nightfall, BuRd, PRGn, sequential YlOrBr, iridescent, incandescent, and discrete/smooth rainbows (“reasonably colour-blind safe” — the author grades his own claims). Full hexes in .research/02-dataviz.md.

Wong 2011 (Nature Methods)

Bang Wong, “Points of view: Color blindness”, Nat. Methods 8:441 (DOI 10.1038/nmeth.1618). The figure-2 palette is numerically identical to Okabe–Ito — this paper is why the life-sciences call it the “Wong palette”. 360+ citations.

IBM: v1 colorblind-safe palette & Carbon data-viz

IBM v1 colorblind-safe

IBM Carbon categorical

cividis (2018) — uniform under CVD simulation itself

Nuñez, Anderton & Renslow, PLOS ONE (DOI 10.1371/journal.pone.0199239). Optimized in CAM02-UCS so the map is perceptually linear for normal and CVD-simulated vision alike — a deuteranope reads the same data values as anyone else. In matplotlib since 2.2.2; also R, Bokeh, Plotly.

cividis endpoints under CVD simulation

Note how little the five sampled stops move across the simulation rows. That invariance is the point.

viridis family (2015) — perceptual uniformity + monotonic luminance

van der Walt & Smith (SciPy 2015), matplotlib’s default since 2.0; R viridisLite. Genuinely CVD-safe by design requirement (monotonic luminance degrades gracefully), with the caveat that its uniformity is computed for normal vision — cividis exists precisely to close that gap. viridis / magma / inferno / plasma all qualify.

viridis endpoints under CVD simulation

seaborn “colorblind” & matplotlib “tableau-colorblind10”

seaborn colorblind

tableau-colorblind10

Petroff accessible color cycles (2021) — in matplotlib as built-in styles

Matthew A. Petroff, “Accessible Color Sequences for Data Visualization” (arXiv:2107.02270, v3 Feb 2024). Combines a crowdsourced aesthetic-preference survey with CAM02-UCS and CVD simulation to generate 6/8/10-color cycles that are both accessible and aesthetic — evaluated under all three dichromacies. Ships in matplotlib as the built-in styles petroff6, petroff8, petroff10; code at mpetroff/accessible-color-cycles (MIT).

Petroff 6 under CVD simulation

Petroff 10 under CVD simulation

Qualpal (2025) — the newest peer-reviewed CVD palette generator

Johan Larsson, “Qualpal: Qualitative Color Palettes for Everyone”, Journal of Open Source Software (DOI 10.21105/joss.08936, Oct 2025). Where Okabe–Ito and Tol ship fixed N-color sets, Qualpal generates palettes for arbitrary N by maximizing pairwise CIEDE2000 distance — with optional CVD simulation (deuteranopia/protanopia/tritanopia, severity-adjustable) built into the objective, so palettes are distinct for CVD viewers, not merely checked afterward. C++ library + CLI, R package qualpalr (GPL-3), Python qualpal, and a web app at qualpal.cc. GPL-3.

Plotly, Bokeh & CARTO — a verified CVD-safe qualitative palette

Both ship a verified CVD-safe palette:

Plotly Safe (CARTO / Tol muted) under CVD simulation

Bokeh Colorblind8 (Okabe–Ito) under CVD simulation

ggpubfigs / pypubfigs — journal-published, actively maintained

Steenwyk & Rokas, Microbiology Resource Announcements 2021 (DOI 10.1128/MRA.00871-21); R and Python (MIT, updated through 2026-02). A curated, publication-oriented bundle re-exporting the canonical CVD sets (Tol bright/muted/vibrant/high-contrast, Okabe–Ito ito_seven, Wong wong_eight, IBM ibm_five) plus two claimed-CVD-safe originals, zesty_four and retro_four:

ggpubfigs zesty_four

ggpubfigs retro_four

Correction: their tableau_ten is the stock Tableau 10 (#4E79A7 #F28E2B …), which is not the Tableau Color Blind 10 and is not CVD-verified — don’t confuse the two.

Palette generators and checkers (produce or verify CVD-safe palettes)

ToolWhat it doesCVD-aware?Link
Qualpalgenerates N-color qualitative palettes maximizing CIEDE2000yes — simulation in the objectivequalpal.cc
distinctipyN maximally-distinct colors; colorblind_type simulates all CVD types and maximizes distance in simulated spaceyesrepo
colorblindcheck (R)checks any palette against deutan/protan/tritan simulations, reports min pairwise distanceyes (checker)repo
iWantHueweb palette generator with an explicit “Improve for the colorblind” refinementyesmedialab.github.io/iwanthue
tol-colors (Python)the de-facto Python port of all Paul Tol schemesinherits Tolrepo
cvdmaps (2026)one-call Okabe–Ito matplotlib cycle + cvdsafe checker (Machado + CIEDE2000)yesopticquiz.com
LaTeX colorblind packageTol’s schemes for LaTeX documents with CVD-safe defaultsinherits TolCTAN
Glasbey / Colorgoricaldistinctness-maximizing generatorsno CVD simulation — flagged—

R ecosystem wrappers (Okabe–Ito made easy): base R ≥4.0 palette.colors("Okabe-Ito"), see scale_color_okabeito(), ggokabeito, ggthemes scale_colour_colorblind(), and rcartocolor scale_color_carto_d() for the CARTO Safe scheme. The canonical citation for base R’s CVD story is Zeileis, Murrell et al., “Coloring in R’s Blind Spot”, The R Journal 15(1), 2023.

2023–2026 institutional endorsements: the Cherenkov Telescope Array Observatory’s ColourBlind Friendly Practices v2 (March 2025) recommends Okabe–Ito/Tol/viridis-class maps; Argonne National Lab published CVD-aware radar colormaps (2024); Zhou et al., “Navigating color integrity in data visualization” (Patterns, 2024) surveys accessible palettes.

ColorBrewer’s colorblind-safe flag (1999–2002) — the first mainstream tool

colorbrewer2.org (Cynthia Brewer) was the first widely used tool to tag schemes “colorblind safe”. Verified flag list from RColorBrewer source: diverging BrBG, PiYG, PRGn, PuOr, RdBu, RdYlBu; qualitative Dark2, Paired, Set2; all 18 sequential schemes. Not flagged: RdGy, RdYlGn, Spectral, Accent, Pastel1/2, Set1, Set3.

ColorBrewer Set2

Fabio Crameri’s Scientific colour maps (2018–2023)

fabiocrameri.ch/colourmaps — every map marked “Colour-vision-deficiency friendly” and grayscale-readable (perceptually uniform, ordered lightness; Kovesi diagnostics). batlow is the flagship “scientific rainbow”; W/K variants (white-/black-ended) make the suite unusually good on both backgrounds. Companion manifesto: Crameri, Shephard & Heron 2020, The misuse of colour in science communication (Nat. Comms, DOI 10.1038/s41467-020-19160-7). MIT; available via Zenodo, cmasher, GMT ≥6.0, R scico/khroma.

batlow endpoints under CVD simulation

David Nichols — Coloring for Colorblindness

davidmathlogic.com/colorblind — interactive checker that renders any palette under protanopia, deuteranopia, tritanopia, and monochrome. His recommended 4-color default and 8 pre-verified safe pairs (e.g. #1A85FF/#D41159):

Nichols default 4

Krzywinski’s 15-color palette

Martin Krzywinski’s mkweb.bcgsc.ca/biovis2012 15-color set, preserved in the CRAN colorBlindness package as paletteMartin:

Krzywinski 15-color palette

R packages collecting the above