Color Palettes

A Palette is a named, ordered list of colors that auto-cycles across plots. Palettes are used to assign consistent, visually distinct colors to multiple series without specifying each one manually.


Using a palette

Auto-cycle across plots

Pass a palette to Layout::with_palette() and kuva assigns colors in order to each plot that does not already have an explicit color set:

#![allow(unused)]
fn main() {
use kuva::render::layout::Layout;
use kuva::render::palette::Palette;

let layout = Layout::auto_from_plots(&plots)
    .with_palette(Palette::wong());
}

Manual indexing

Index directly into a palette with []. Indexing wraps with modulo, so pal[n] is always valid regardless of palette size:

#![allow(unused)]
fn main() {
let pal = Palette::tol_bright();
let color_a = &pal[0];  // "#4477AA"
let color_b = &pal[1];  // "#EE6677"
let color_c = &pal[7];  // wraps: same as pal[0]
}

CLI

kuva scatter data.tsv --x x --y y --palette wong
kuva line data.tsv --x-col time --y-col value --color-by group --palette tol_muted

Available CLI values: wong, okabe_ito, tol_bright, tol_muted, tol_light, ibm, category10, pastel, bold.

For convenience, --cvd-palette TYPE selects a colorblind-safe palette by condition name: deuteranopia, protanopia, tritanopia.


Built-in palettes

Colorblind-safe

ConstructorNColors
Palette::wong()8#E69F00 #56B4E9 #009E73 #F0E442 #0072B2 #D55E00 #CC79A7 #000000
Palette::okabe_ito()8Same as Wong — widely known by both names
Palette::tol_bright()7#4477AA #EE6677 #228833 #CCBB44 #66CCEE #AA3377 #BBBBBB
Palette::tol_muted()10#CC6677 #332288 #DDCC77 #117733 #88CCEE #882255 #44AA99 #999933 #AA4499 #DDDDDD
Palette::tol_light()9#77AADD #EE8866 #EEDD88 #FFAABB #99DDFF #44BB99 #BBCC33 #AAAA00 #DDDDDD
Palette::ibm()5#648FFF #785EF0 #DC267F #FE6100 #FFB000

Recommendations:

  • wong / okabe_ito — best general choice; safe for deuteranopia and protanopia (~7% of males)
  • tol_bright — safe for tritanopia; good for presentations
  • tol_muted — 10 colors for larger datasets; safe for all common CVD types
  • ibm — compact 5-color set from the IBM Design Language

Colorblind condition aliases

These are convenience constructors that return an appropriate palette for a specific condition:

ConstructorReturnsSafe for
Palette::deuteranopia()WongRed-green (~6% of males)
Palette::protanopia()WongRed-green (~1% of males)
Palette::tritanopia()Tol BrightBlue-yellow (rare)

General-purpose

ConstructorNColors
Palette::category10()10#1f77b4 #ff7f0e #2ca02c #d62728 #9467bd #8c564b #e377c2 #7f7f7f #bcbd22 #17becf
Palette::pastel()10#aec7e8 #ffbb78 #98df8a #ff9896 #c5b0d5 #c49c94 #f7b6d2 #c7c7c7 #dbdb8d #9edae5
Palette::bold()10#e41a1c #377eb8 #4daf4a #984ea3 #ff7f00 #a65628 #f781bf #999999 #66c2a5 #fc8d62

category10 is the default when no palette is set.


Custom palettes

#![allow(unused)]
fn main() {
use kuva::render::palette::Palette;

let pal = Palette::custom(
    "my_palette",
    vec!["#264653".into(), "#2a9d8f".into(), "#e9c46a".into(),
         "#f4a261".into(), "#e76f51".into()],
);

let layout = Layout::auto_from_plots(&plots).with_palette(pal);
}

API reference

MethodDescription
Palette::wong()Bang Wong 8-color colorblind-safe palette
Palette::okabe_ito()Alias for Wong
Palette::tol_bright()Paul Tol qualitative bright, 7 colors
Palette::tol_muted()Paul Tol qualitative muted, 10 colors
Palette::tol_light()Paul Tol qualitative light, 9 colors
Palette::ibm()IBM Design Language, 5 colors
Palette::deuteranopia()Alias for Wong
Palette::protanopia()Alias for Wong
Palette::tritanopia()Alias for Tol Bright
Palette::category10()Tableau/D3 Category10, 10 colors (default)
Palette::pastel()Pastel variant of Category10, 10 colors
Palette::bold()High-saturation vivid, 10 colors
Palette::custom(name, colors)User-defined palette
pal[i]Color at index i; wraps with modulo
pal.len()Number of colors
pal.colors()Slice of all color strings
pal.iter()Cycling iterator (never returns None)