Skip to main content
Executive Support by Beige Threat

Data viz

Charts are reading material. They earn space when they say something a sentence can’t – a turn, a gap, a shape of change. Everything below is built from the same six colours we use elsewhere, so a chart in an article looks like part of the article, not a screenshot of a dashboard.

The categorical palette

Six colours, drawn straight from the brand. Use them in this order – the first slot always reads as “the one.” Never reuse a colour for two series. If you need more than six categories, group the long tail into “other” – don’t paint your way out with an off-brand seventh hue.

cat-01
cat-01
#06A0A9

teal-600 · primary series, default first.

cat-02
cat-02
#181F2C

navy-900 · second series, weighty contrast.

cat-03
cat-03
#C2B775

mustard-400 · third series, warm midweight.

cat-04
cat-04
#E3783D

orange-500 · fourth series, warm signal.

cat-05
cat-05
#BDC983

sage-400 · fifth series, cool midweight.

cat-06
cat-06
#7D76AD

lavender-500 · sixth series, editorial accent.

The order is deliberate – teal and navy carry the load, the warm pair (mustard, orange) sit second, and the cool pair (sage, lavender) finish the run. Read left to right; never scramble.

Sequential ramps

For ordinal data – low to high, sparse to dense, early to late. Single-hue ramps are unambiguous about ordering. Use the teal ramp for cool data (volume, time, neutral magnitude) and the mustard ramp for warm data (intensity, attention, heat).

Teal · cool data
100
300
500
600
700
800
900
Mustard · warm data
100
300
500
600
700
800
900

Pick the ramp that matches the topic, not the brief. Email opens, subscriber counts, time elapsed – teal. Engagement intensity, dwell time, attention spikes – mustard. Never split a single chart across both ramps.

Divergent

For data with a meaningful zero – above and below average, gain and loss, sentiment. Teal anchors the negative end, cream sits at zero, orange anchors the positive end. Nine stops, locked polarity. Never invert.

−4
−3
−2
−1
0
+1
+2
+3
+4

The cream centre is load-bearing. Without a clear zero, the eye reads the lightest stop as “missing data” – not “average.” Always label zero on the axis.

Axes

Axes are scaffolding. They hold the chart up; they don’t perform. Hairlines in stone-300, ticks in stone-500, labels in 11px Inter, stone-700. Title and source line sit outside the plot area.

3k2k1k0Q1Q2Q3Q4

Gridlines, when needed, are stone-200 – just visible enough to read against. Bold gridlines fight the data; they shouldn’t.

Type in charts

Five sizes, no more. Each one has a job; if it doesn’t, cut it.

Chart type scale
Title
Freight Text · 16px / 600

States what is being measured. Sits above the plot, left-aligned.

Subscribers by channel, 2026
Subtitle
Inter · 14px / 400

Optional. Adds the unit, the period, the caveat.

Net new, weekly · paid tier only
Axis label
Inter · 11px / 500

Stone-700. Sentence case. Units in parentheses.

Subscribers (thousands)
Data label
Inter · 10px / 600

Only when the number matters more than the shape – peaks, totals, the one anomaly.

2,847
Source line
Inter · 10px / 400

Stone-600. Sits below the chart, italic permitted for attribution.

Source: Executive Support reader survey, Apr 2026

Legend

Above the plot when there are four series or fewer. To the right when there are five or six. Inline with the title when there’s room – it’s the densest, fastest read.

Bullet shape: 8px circle for line series, 10px square for area or bar fills. Spacing between entries: 16px. Never centre a legend; left-align with the chart edge.

Above · n ≤ 4
DirectReferralSearch
Right · n ≥ 5
DirectReferralSearchPrintSocial

If the chart has six or fewer lines and they don’t cross often, drop the legend entirely – label each line at its right edge instead.

Chart types

Six shapes cover ninety per cent of what we publish. Each one has a job; pick by question, not by mood.

Line — for trend over time

A continuous variable measured at regular intervals. The strongest format for “is this going up or down.”

Reader retention, weeks 1 – 12
Direct vs referral cohorts
100%50%0DirectReferralweek

Two to four lines maximum. More than that, switch to small multiples.

Bar (horizontal) — for ranked comparisons

When the categories have names worth reading. Always sorted; never alphabetical unless the user is searching.

Time on page, by section
Median minutes per visit
InterviewFeatureProfileOp-edNotesLetters

Single hue when the categories are equal in kind – it’s about the lengths, not the colours.

Column — for category × time

Vertical bars when the x-axis is time. Two or three series only; past that, switch to lines.

Issues shipped, by quarter
Print vs digital, 2024 – 2026
840Q1 24Q3 24Q1 25Q3 25Q1 26

Area — for cumulative or stacked share

Use when the total matters as much as the parts. Single area for one series, stacked for parts-of-whole over time.

Reading time, cumulative
Hours per reader, year to date
1260month

Stacked areas only when the order is meaningful – biggest at the bottom, smallest at the top.

Dot/strip — for distributions

When you want to show every observation, not a summary. Honest about variance.

Article length, by section
Words per piece · each dot a published article
InterviewFeatureNoteswords (thousands)

Use slight transparency – overlapping dots are information, not a problem.

Donut — for parts-of-whole, four slices or fewer

Donuts read badly past four. If you have more than four, switch to a horizontal bar.

Subscribers by tier
Share of paid base · Apr 2026
Annual · 60%Monthly · 25%Student · 15%

Always label the slices with their percentage. The shape alone is too imprecise.

Accessibility

Colour is the last layer of meaning, never the first. Charts must read in greyscale, under deuteranopia and protanopia, and through a screen reader.

The categorical order – teal → navy → mustard → orange → sage → lavender – has been tested for distinguishability. Teal, navy, and orange are the three most reliable hues across colour-vision deficiencies. Sage and mustard sit close in luminance under deuteranopia simulation; if both appear in the same chart, pair them with patterns or markers.

Do · Direct labels under six lines
DirectReferral

Labels next to the lines beat a separate legend. The eye moves once, not twice.

Don't · Encode meaning in colour alone

Two close-luminance hues vanish under deuteranopia. Pair with shape, pattern, or direct label.

Every chart ships with a one-sentence summary directly below it – the trend stated in plain English, for screen readers and for skimmers (“Sales rose 18% year on year”). Provide a table fallback for any chart in long-form editorial; it is also the source for accessibility tools and translation.

Annotations

Used sparingly. Annotations are for the moment a sentence below the chart can’t reach – a baseline, an event, a turn.

targetissue 84 launch

Mark with a thin stone-400 dashed line and a 9px label in stone-600. Never compete with the data series – annotations are background, not foreground.

Usage rules

Do · Title says what's measured
Subscribers by channel, 2026
Net new, weekly

Specific noun, specific period. The reader knows what they’re looking at before they read the axes.

Don't · Decorate with shadows or 3D

Shadows distort length; 3D distorts everything. Never. Charts are flat by law.

Do · Y-axis starts at zero, for bars
1000

Bar lengths read as ratios. A truncated axis turns a 5% gap into a 50% gap. Always start at zero.

Don't · Truncate the y-axis on bars
10088

A 12-point spread looks like a tenfold rise. Misleading – never on bars. Line charts may zoom; bars must not.

Do · Subtle gridlines, when needed

Stone-200 horizontals only when needed. The data sits forward; the scaffolding stays back.

Don't · Bold gridlines that fight the data

Heavy gridlines compete with the data. The reader’s eye should land on the line, not the grid.

Do · Categorical for unordered, sequential for ordered
unordered → categorical (six hues)
ordered → sequential (single ramp)
centred → divergent (teal ↔ orange)

The data type chooses the palette. Never use the categorical six to encode magnitude – the colour order isn’t ordinal.

Don't · One chart trying to say five things

One insight per chart. Five lines crowding the same plot is five charts in a trench coat.

Two more, in plain English:

  • The legend doesn’t repeat the title. If the title says “by channel,” the legend lists channels – not “Channels.”
  • Categorical palette never encodes order. Teal isn’t more than navy; orange isn’t more than mustard. The cat- slots are for unordered groups – use a sequential ramp the moment magnitude is involved.

Tokens to ship

A flat surface of dataviz tokens, each backed by a colour stop already in the system. No new primitives.

Categorical · cat-01 to cat-06
--es-dataviz-cat-01
teal-600 · #06A0A9

First series. The default for a one-series chart.

--es-dataviz-cat-02
navy-900 · #181F2C

Second series. Heaviest contrast against teal.

--es-dataviz-cat-03
mustard-400 · #C2B775

Third series. Warm midweight; pair with patterns next to sage.

--es-dataviz-cat-04
orange-500 · #E3783D

Fourth series. Warm signal; reads as the negative anchor in divergent.

--es-dataviz-cat-05
sage-400 · #BDC983

Fifth series. Cool midweight; never adjacent to mustard without patterns.

--es-dataviz-cat-06
lavender-500 · #7D76AD

Sixth series. Editorial accent; closes the run.

Sequential · single-hue ramps
--es-dataviz-seq-teal-{100..900}
teal-100 → teal-900

Cool data: counts, time, neutral magnitude.

--es-dataviz-seq-mustard-{100..900}
mustard-100 → mustard-900

Warm data: intensity, attention, heat.

Divergent · teal ↔ cream ↔ orange
--es-dataviz-div-{−4..+4}
9 stops · zero = stone-50

For data with a meaningful midpoint. Polarity is locked.

Structure · axes, gridlines, type
--es-dataviz-axis
stone-300 · #D3D1CA

Axis hairlines. 1px stroke; never bold.

--es-dataviz-tick
stone-500 · #9A9892

Tick marks. 4px outward; aligns with the value, not the gap.

--es-dataviz-grid
stone-200 · #E7E5DD

Optional horizontal gridlines. Never on top of data.

--es-dataviz-text-label
Inter · 11px / 500 · stone-700

Axis labels and tick text.

Subscribers (thousands)
--es-dataviz-text-annotation
Inter · 9px / 400 · stone-600

Annotation labels and event markers.

issue 84 launch

Charts inherit colour from the palette, type from typography, spacing from the grid. Nothing in this page invents a token – it only assigns existing stops to chart-specific roles. That’s the whole point.