Skip to content

Calendar heatmap

Every day of a season in one grid.

Definition · Updated Nov 2, 2026

A calendar heatmap lays days out as weeks and weekdays, then shades each day by its value. Busy weeks, quiet weekends and streaks show up as patterns. Use it for deploys, activity, sales or anything counted per day.

Pay once. Every update included.

Live preview

Production deploys per dayDeploy intensity per day over 20 weeks, May to September, on a 0–6 scale: 39 of 137 days had no deploys; the busiest days reach 6.MONWEDFRIMAYJUNJULAUGSEPLESSMORE
Production deploys per day
WeekMonTueWedThuFriSatSun
Week 10321000
Week 23332201
Week 33011200
Week 40020410
Week 51324100
Week 63122300
Week 74213101
Week 81010000
Week 94310010
Week 101102301
Week 112203011
Week 122411110
Week 131024401
Week 145622201
Week 155246501
Week 162653410
Week 173466210
Week 185522200
Week 196332301
Week 205554–––

Sample data: production deploys per day, last 20 weeks, May to September

Size
Data shape
One value per day
Good for
Deploys, activity, daily sales
Avoid when
Readers need the exact number per day
Sizes
XS, S, M and L, re-laid out from the data

Anatomy

Inspect it like the Figma file.

The same layers, names and tokens as the component. Select one to read its size, fill and style.

Layers

025 / Calendar heatmap

chart/025-calendar-heatmap
plot · calendar heatmap
Layer
day 0·1
Type
Rectangle
Size
32 × 32
Fill
data/seq-3
Radius
2
Group
Marks · 141

Layers

025 / Calendar heatmap

chart/025-calendar-heatmap
plot · calendar heatmap
Layer
day 0·0
Type
Rectangle
Size
9 × 9
Fill
data/idle
Radius
2
Group
Marks · 141

Sizes

Re-laid out, never scaled.

The same data at XS, S, M and L. Every size is redrawn from the data, so text and line weights never shrink.

M against S

Width360 px480 px

Plot328 px440 px

Labels1010

Marks141141

Height212 px246 px

Same tokens at every size: text styles, 1 px lines and mark radius stay put.

When to use

Days, as a pattern.

Three signs it fits, and three signs another type fits better.

Is it one value per day?

Hours inside the day matter.

Yes: Keep the calendar heatmap

Is the weekly pattern the point?

Only the trend matters.

Yes: Keep the calendar heatmap

Does it cover a few months?

A full year in one loop.

Yes: Keep the calendar heatmap

Code and Figma

One name in Figma and in code.

Every Figma property is a prop with the same name and values. One command installs it.

Figma

chart/025-calendar-heatmap

size
legend
Property = propValuesDefault
size"xs" · "s" · "m" · "l""xs"
legendfalsefalse
color"cat-1" · "cat-2" · "cat-3" · "cat-4""cat-1"
npx shadcn add @chartory/calendar-heatmap
calendar-heatmap.tsx
import { CalendarHeatmap } from "@/components/chartory/calendar-heatmap"import { deploysPerDay } from "./deploys-per-day"export function DeploysPerDay() {  return (    <CalendarHeatmap      data={deploysPerDay}      size="m"      legend={false}    />  )}

Hearth widget

Calendar heatmap as a widget.

The chart in a Hearth card with a hero number and two blocks. One token set, light and dark.

Code
Get the code

EmberPreset

ChartoryDefault preset

Pick the blocks, the size and the preset for your own widget.

Read the Hearth widget docs

FAQ

Calendar heatmap questions.

What people ask before they put a calendar heatmap in a dashboard.

Something else?

hello@usechartory.com
  • The sample shows twenty weeks, May to September, one column per week. For a full year of weeks, the spiral year winds 52 weeks into one coil.

Related types

The same question, a different shape of answer. Every type ships in Figma and in code.

Same family

Change over time

Trends, levels and seasons across days, months or years.