Skip to content
DocsChartsPunch cardLast updated Nov 2, 2026

Punch card

Activity by weekday and hour, as sized dots. Sample data: API calls by weekday and hour, Monday to Sunday, 00 to 23.

Open in
API calls by hourAPI calls (thousands) per hour for each day of the last week: busiest WED 10:00 with 116; weekends stay under 39.MONTUEWEDTHUFRISATSUN0006121823CALLSPEAK HOURS
API calls by hour
Day000102030405060708091011121314151617181920212223
MON97557103152891131027873691111038059543625211613
TUE9744714356278981159371741071049184453729222213
WED964471031499485116947176851007872593732262014
THU95446143155909182747972951088774524327212114
FRI9743512305474771029282761001078962553930281814
SAT321124920253630382826303426231815121074
SUN421124111530283438302728353525181212954
API calls by hourAPI calls (thousands) per hour for each day of the last week: busiest WED 10:00 with 116; weekends stay under 39.MONTUEWEDTHUFRISATSUN0006121823CALLSPEAK HOURS
API calls by hour
Day000102030405060708091011121314151617181920212223
MON97557103152891131027873691111038059543625211613
TUE9744714356278981159371741071049184453729222213
WED964471031499485116947176851007872593732262014
THU95446143155909182747972951088774524327212114
FRI9743512305474771029282761001078962553930281814
SAT321124920253630382826303426231815121074
SUN421124111530283438302728353525181212954

Installation

  1. 1

    Set up the registry once

    This chart is free in Hearth and MIT licensed: no token. Add @chartory to components.json once (the URL alone, no headers), or skip this when another chart is already installed.

    Installation guide
  2. 2

    Add the chart

    One command adds the Punch card component to your project.

    npx shadcn add @chartory/punch-card
  3. 3

    Use it

    Pass your rows. The props are the Figma properties.

    usage.tsx
    import { PunchCard }  from "@/components/chartory/punch-card"<PunchCard  data={apiCalls}  size="m"  legend/>

Props

<PunchCard>

Every prop but data is a Figma property with the same name and values.

PropTypeDefault
data: The chart's data. The tables below list every field.PunchCardDataRequired
size: The size class. Each one is laid out again from the data."xs" | "s" | "m" | "l""m"
legend: Shows the legend row under the plot.booleantrue
color: The data colour of the primary marks (data/primary)."cat-1" | "cat-2" | "cat-3" | "cat-4""cat-1"

PunchCardData

The data prop: one object for the whole chart.

PropTypeDefault
rows: The row labels, in order.string[]Required
vals: The values, in order.number[][]Required
xl: The x axis labels, by index.Record<number, string>Required

The data as a JSON Schema: schemas/punch-card.json

Punch card: a React and Figma chart in four sizes

What does a punch card show?

A punch card puts weekdays down the side and hours across, and draws a dot in each cell sized by activity. Peak hours stand out as the biggest dots. Use it for API calls, commits or support load by time of week.

Chartory ships it as a Figma component and a React component with the same name. The code installs from the shadcn registry with one command and lands in your project as a file you own.

What is the Punch card component?

It is one <PunchCard> component. Its props are the Figma properties with the same names and values, and the props table above lists them. The data is a count per weekday and hour.

Sizes XS, S, M and L re-lay the chart out from the data instead of scaling it, so labels stay readable at every size.

When should I use it?

  • Are dot sizes enough? Yes means the punch card fits.
  • Is a grid wanted? Yes means the punch card fits.
  • Is it counts, not runs? Yes means the punch card fits.

When does another type fit better?

  • Shaded cells. Use Heatmap instead.
  • A round week. Use Radial hour heatmap instead.
  • A week of runs with a now marker. Use Weekly rhythm instead.

Punch card questions

Installing, data, Figma and plans.

  • Yes. It installs through the shadcn registry with the shadcn CLI, and the file lands in your project.

Stay in the loop

New charts, by email.

Get an email when new chart types and releases ship.

Unsubscribe any time.