Charts / CH-TIM-07
CH-TIM-07 . family TIM

CALENDAR HEATMAP

weekday x week grid, shaded and numbered. Needs: a count or measure per weekday per week; the weekly rhythm is the message.

patternchange-over-timedensity

DL-01 AGRAW
Volume builds through July and Thursdays stay the peak day W18 W19 W20 W21 W22 W23 W24 W25 W26 W27 W28 W29 Mon 9 10 11 10 12 11 12 12 14 11 13 14 Tue 14 13 15 16 15 17 16 18 16 17 19 20 Wed 18 19 18 20 21 20 22 22 25 21 24 26 Thu 27 28 30 31 33 34 36 38 41 44 47 49 Fri 12 13 12 14 14 15 15 16 15 18 17 18 Source: sample dataset v1, 2026-07-12

Use when

  • workload rhythm: deliveries, tickets, tests per weekday across weeks
  • capacity planning around recurring peaks

Do not use when

  • non-calendar dimensions (CH-COR-03)
  • single week (a column chart does it)

See instead

Alternatives

  • CH-COR-03 (generic two-dimension grids)

Rules

  • weekday rows in calendar order, always
  • values printed in every cell
  • single-hue ramp; global normalization

Never do this

  • sorting weekdays by value
  • rainbow ramps
  • cells without values

QA before delivering

  • weekday order fixed
  • every cell numbered
  • title names the rhythm
  • source present

Data shape

titleaction title naming the rhythm
sourcebottom-left always
columnsweek labels
rowsweekday rows {label, values[]}
Sample data (golden)
{
  "title": "Volume builds through July and Thursdays stay the peak day",
  "eyebrow": "DELIVERIES . W18-W29",
  "source": "Source: sample dataset v1, 2026-07-12",
  "columns": [
    "W18",
    "W19",
    "W20",
    "W21",
    "W22",
    "W23",
    "W24",
    "W25",
    "W26",
    "W27",
    "W28",
    "W29"
  ],
  "rows": [
    {
      "label": "Mon",
      "values": [
        9,
        10,
        11,
        10,
        12,
        11,
        12,
        12,
        14,
        11,
        13,
        14
      ]
    },
    {
      "label": "Tue",
      "values": [
        14,
        13,
        15,
        16,
        15,
        17,
        16,
        18,
        16,
        17,
        19,
        20
      ]
    },
    {
      "label": "Wed",
      "values": [
        18,
        19,
        18,
        20,
        21,
        20,
        22,
        22,
        25,
        21,
        24,
        26
      ]
    },
    {
      "label": "Thu",
      "values": [
        27,
        28,
        30,
        31,
        33,
        34,
        36,
        38,
        41,
        44,
        47,
        49
      ]
    },
    {
      "label": "Fri",
      "values": [
        12,
        13,
        12,
        14,
        14,
        15,
        15,
        16,
        15,
        18,
        17,
        18
      ]
    }
  ]
}