Upcoming: Charts & Color

Saturday, Jan 16 · 10:00 AM to 12:00 PM CST

The Coffee Shop NE
2852 Johnson St NE · Minneapolis, MN

Join tcplot for a morning about color in charts, in two acts, in the grayest month of the Minnesota year.

A long chart of reference ranges for blood tests: dozens of overlapping bars in green, cyan, orange, red, pink, and violet on a log scale, labeled with hormones, vitamins, and proteins

Mikael Häggström, Reference ranges for blood tests (2009): normal ranges for dozens of blood tests on one log scale, by mass above and by molar concentration below. Color does the sorting, and fading bar ends show where a range gets fuzzy. Public domain (CC0).

Act one: bring a chart

Your ticket in is one chart and two minutes on its color: a palette you love, a heatmap that finally made something click, a transit map you could navigate with your eyes half shut, or a rainbow colormap you love to hate. By the end of the round we'll have a wall of examples to steal from.

Act two: recolor

After a short primer on how color works in charts (sequential, diverging, and categorical palettes, why rainbows invent edges that aren't in the data, and how a chart looks to the one in twelve men with color vision deficiency), pick a chart, yours or one from our starter set, and recolor it. Then show the before and after. Or pull a palette from a January window in Minneapolis and make it work as a real chart palette.

Pick your lane:

  • No-code: ColorBrewer, Viz Palette, Datawrapper
  • Code: d3-scale-chromatic, chroma.js, matplotlib and viridis, ggplot2
  • Accessibility: colorblindness simulators and contrast checkers
  • Analog: paint chips, colored pencils, and paper

Color in charts, briefly

The primer, in short. Most color decisions in a chart come down to matching the palette to the shape of the data.

Sequential: low to high

For ordered values with no special middle: temperature, income, population density. Lightness should change steadily from one end to the other, so darker reads as more (or less) without a legend lookup. This one is viridis, matplotlib's default since 2015.

Diverging: two directions from a middle

For data with a meaningful midpoint: above or below zero, gains and losses, warmer or cooler than normal. Two hues darken as they move away from a light, neutral center. Put the center on the value that matters, not just the middle of the range.

Categorical: different, not more

For groups with no order: species, neighborhoods, parties. Hues should look equally important, so none reads as a ranking. Past about seven categories, color stops working; label directly or group the rest as "other." This is the Okabe-Ito palette, designed to stay distinct for colorblind readers.

Why rainbows invent edges

The rainbow (above, then in grayscale) isn't ordered by lightness: brightness climbs to a peak at cyan and yellow, then falls again. Your eye reads those bright bands as sharp boundaries, so smooth data looks like it has edges, and the darkest blue and darkest red look nearly the same. Compare viridis, which keeps getting lighter the whole way.

One in twelve men

About 1 in 12 men and 1 in 200 women of Northern European ancestry have some color vision deficiency, most often red-green. A chart that separates groups only by red and green fails them. Vary lightness as well as hue, label lines directly instead of relying on a legend, and check your chart in a colorblindness simulator before you share it.

No design experience needed; the primer starts from zero. Bring one chart whose color you have opinions about (on a phone, a laptop, or paper) and, if you want to build digitally, a laptop.

RSVP on Meetup.

Hope to see you there!