Charts / CH-DST-05
CH-DST-05 . family DST

POPULATION PYRAMID

two mirrored bar stacks around a labeled center gutter, one row per band. Needs: ordered bands (age, tenure, size class) with counts for two groups.

distributioncomparison

DL-01 AGRAW
Staffing thins sharply above 50 Women Men 60+ 34 staff 52 50-59 86 140 40-49 190 300 30-39 270 410 20-29 160 220 Source: HR register, June

Use when

  • two groups across ordered bands: age structures, tenure mixes
  • asymmetry between the two sides is the message

Do not use when

  • more than two groups (small multiples)
  • bands without a natural order (CH-MAG-03)

See instead

Alternatives

  • CH-MAG-03 (unordered categories)
  • CH-DEV-03 (two-part shares)

Rules

  • both sides share one zero-based scale, mirrored
  • band labels live in the center gutter
  • sides named above the first row, never a legend

Never do this

  • different scales per side (the classic pyramid lie)
  • unordered bands
  • more than two sides

QA before delivering

  • one shared mirrored scale
  • bands in order
  • sides named once
  • unit once
  • source present

Data shape

titleaction title naming the asymmetry
sourcebottom-left always
uniton first left value
series_labels[left_name, right_name], printed above the first row
bandsarray of {label, a, b}, ordered top band first
Sample data (golden)
{
  "title": "Staffing thins sharply above 50",
  "eyebrow": "WORKFORCE BY AGE",
  "source": "Source: HR register, June",
  "unit": "staff",
  "series_labels": [
    "Women",
    "Men"
  ],
  "bands": [
    {
      "label": "60+",
      "a": 34,
      "b": 52
    },
    {
      "label": "50-59",
      "a": 86,
      "b": 140
    },
    {
      "label": "40-49",
      "a": 190,
      "b": 300
    },
    {
      "label": "30-39",
      "a": 270,
      "b": 410
    },
    {
      "label": "20-29",
      "a": 160,
      "b": 220
    }
  ]
}