Charts / CH-PTW-07
CH-PTW-07 . family PTW

MARIMEKKO

100% stacked columns whose widths carry a second total. Needs: 2-6 categories with a total each, split into 2-4 shared segments.

part-to-wholecompositionmagnitude

DL-01 AGRAW
North holds a third of spend and commits the deepest share 58% Committed 25% Planned 17% Open North 120 k$ 44% 33% 22% Central 90 33% 42% 25% South 60 33% 33% 33% East 45 West 30 Source: sample dataset v1, 2026-07-12

Use when

  • two composition questions at once: how big is each category, and how does each split
  • market or spend maps where width = size and height = share

Do not use when

  • audiences reading it for the first time without a walkthrough
  • more than 6 columns or 4 segments (it becomes a mosaic of noise)

See instead

Alternatives

  • CH-PTW-02 (equal widths)
  • CH-PTW-05 (one level, area only)

Rules

  • column width proportional to its total; heights are per-column shares
  • segment names labeled on the first column, never a legend
  • share printed in cells that fit; small cells stay silent
  • column totals printed under the labels

Never do this

  • more than 6x4 cells
  • legends
  • 3D mosaic effects
  • widths not proportional to totals

QA before delivering

  • width = total, height = share
  • segments named once
  • totals printed
  • unit once
  • source present

Data shape

titleaction title with a number
sourcebottom-left always
uniton first column total
segment_names2-4 names, shared by every column
columns[{label, segments: [values]}], width = column total
Sample data (golden)
{
  "title": "North holds a third of spend and commits the deepest share",
  "eyebrow": "SPEND MAP . 2026",
  "source": "Source: sample dataset v1, 2026-07-12",
  "unit": "k$",
  "segment_names": [
    "Committed",
    "Planned",
    "Open"
  ],
  "columns": [
    {
      "label": "North",
      "segments": [
        70,
        30,
        20
      ]
    },
    {
      "label": "Central",
      "segments": [
        40,
        30,
        20
      ]
    },
    {
      "label": "South",
      "segments": [
        20,
        25,
        15
      ]
    },
    {
      "label": "East",
      "segments": [
        15,
        15,
        15
      ]
    },
    {
      "label": "West",
      "segments": [
        5,
        10,
        15
      ]
    }
  ]
}