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.
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:
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
- IDL v1 5-color set (
#648FFF #785EF0 #DC267F #FE6100 #FFB000) — the widely-quoted IBM colorblind-safe palette; the original page is archived but the values are corroborated in Nichols' tool and Lospec’s catalog of the v1 token names. - Carbon Design System (data-viz color palettes, Apache-2.0) — current, actively maintained; 14-color categorical sequence curated to maximize neighbor contrast, monochromatic sequential ramps used inverted on dark themes, theme-agnostic diverging ramps. Explicitly supports light and dark.
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.
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.
seaborn “colorblind” & matplotlib “tableau-colorblind10”
sns.color_palette("colorblind")(seaborn’s default) is a lightened Okabe–Ito variant plus tan, pink, grey — source.plt.style.use('tableau-colorblind10')ships Tableau’s color-blind 10 — source; blue/orange-led with graded lightness so the grey pairs stay separable.
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).
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—px.colors.qualitative.Safeis the CARTOColors “Safe” scheme, tagged["qualitative","colorblind"]in CARTO’s source. It is essentially Paul Tol’s “muted” scheme reordered (plus#661100at size 10–11). Verified in_plotly_utils/colors/carto.py. The defaultPlotly10-color cycle is not CVD-safe. - Bokeh
Colorblind—Colorblind8inbokeh/palettes.pyis Okabe–Ito reordered (blue first), plus Tol’sBright/HighContrast/Vibrant/Mutedgroups.
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:
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)
| Tool | What it does | CVD-aware? | Link |
|---|---|---|---|
| Qualpal | generates N-color qualitative palettes maximizing CIEDE2000 | yes — simulation in the objective | qualpal.cc |
| distinctipy | N maximally-distinct colors; colorblind_type simulates all CVD types and maximizes distance in simulated space | yes | repo |
| colorblindcheck (R) | checks any palette against deutan/protan/tritan simulations, reports min pairwise distance | yes (checker) | repo |
| iWantHue | web palette generator with an explicit “Improve for the colorblind” refinement | yes | medialab.github.io/iwanthue |
| tol-colors (Python) | the de-facto Python port of all Paul Tol schemes | inherits Tol | repo |
| cvdmaps (2026) | one-call Okabe–Ito matplotlib cycle + cvdsafe checker (Machado + CIEDE2000) | yes | opticquiz.com |
LaTeX colorblind package | Tol’s schemes for LaTeX documents with CVD-safe defaults | inherits Tol | CTAN |
| Glasbey / Colorgorical | distinctness-maximizing generators | no 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.
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.
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):
Krzywinski’s 15-color palette
Martin Krzywinski’s mkweb.bcgsc.ca/biovis2012 15-color set,
preserved in the CRAN colorBlindness
package as paletteMartin:
R packages collecting the above
- khroma (Tesselle, GPL-3) — Okabe–Ito + Tol + Crameri
implementations with built-in CVD-simulation diagnostics (
plot_scheme_colorblind()). - colorBlindness
(Jianhong Ou, GPL≥2) — Wong/Okabe–Ito
safeColors, Krzywinski’s 15, heatmap diverging ramps, and a Viénot–Brettel–Mollon simulator (cvdPlot()).




















