foundations
Data visualisation
Every chart is an argument. Never encode by colour alone. Respect the risk taxonomy. Honesty over aesthetics.
Read the full specChart-type decision guide
Pick from the intent, not the aesthetic. This is the short version of the decision tree — the spec covers edge cases.
- Change over time — one seriesLinealt · Area (when volume matters)
- Change over time — 3+ seriesLine, small-multiplealt · Stacked area (composition)
- Comparison across categoriesHorizontal baralt · Vertical bar if names short
- Part-to-whole — few partsDonut with labelsalt · Stacked bar
- Part-to-whole — many partsTreemapalt · Never pie
- DistributionHistogramalt · Box plot (expert)
- CorrelationScatteralt · Hex-bin for dense data
- Geographic densityHeatmap (H3 grid)alt · Choropleth
- Risk score over timeLine + thresholdalt · Area with banded severity
Line — multi-series with end labels
Two risk categories tracked over eight weeks. End-of-line labels mean colour is not the only way to tell the series apart.
<Line dataKey="theft" stroke="var(--risk-theft)" />
<Line dataKey="assault" stroke="var(--risk-assault)" />Area — single-series volume
Daily report volume over a week. Area fits when cumulative magnitude matters; otherwise use line.
Horizontal bar — ranked comparison
Comparison across areas. Horizontal bars avoid rotated labels and let long area names sit naturally.
Donut — part-to-whole with labels
Four categories max before a donut becomes illegible. Over four, switch to a stacked bar or a treemap.
- Theft44%
- Vehicle22%
- Assault18%
- Disorder16%
Stat card
The KPI summary card. Label, value, optional unit, and an explicit change indicator paired with an icon — colour alone never carries the signal.
Reports this week
1,247
+12% vs last week
Active areas
42
unchanged
Response SLA
94%
−3pp vs last week