Skip to content

Data Analysis

Activity Heatmaps: Useful Visualization or Easy to Overinterpret?

The calendar grid is persuasive out of proportion to what it shows. That is exactly the problem.

Subdex · 2026-08-22 · 3 min read

The calendar heatmap — a year of days, shaded by count — is one of the most effective visualizations in common use. It shows several hundred data points in a small space, and patterns leap out without effort.

That effectiveness is also its problem. It is persuasive out of proportion to what it actually shows, and it invites a specific error.

What it shows well

Density over time. Whether activity is steady or bursty is visible instantly, and hard to convey in a table.

Discontinuities. A blank stretch in an otherwise full year is unmissable. Whether it means anything is a separate question, but you will see it.

Weekly rhythm. Because the grid aligns days of the week into rows, weekday-versus-weekend patterns emerge from the layout itself rather than from any calculation.

The error it invites

A heatmap of archive records looks like a heatmap of a person's life. It is not. It is a picture of when records the archive captured and you loaded were created.

That distinction disappears the moment the grid renders, because the visualization is identical whether the underlying data is complete or forty percent of what existed.

So a blank fortnight has at least four explanations: the person was inactive, the archive's collection was degraded, your load did not extend that far back, or their activity that fortnight was in a community the archive does not cover well.

Only the first is about the person. The visualization cannot distinguish them, and readers will assume the first because it is the one that tells a story.

Density is not intensity

A dark cell means many records that day. It does not mean sustained engagement.

Twenty comments in one heated forty-minute argument produce the same shade as twenty comments spread across a day. Reddit's threading rewards rapid back-and-forth, so a single disagreement can dominate a day's count.

If a specific dark cell matters to your analysis, read the records behind it. The shade tells you where to look, not what you will find.

Absence is the weakest signal

Heatmap gaps feel like findings. "This account went quiet for three months" is a sentence people write from a picture.

For it to be supportable you need to know that the archive covered that period well, that your load extended through it, and that the account's activity would have been captured. Usually you know none of these.

Absence in archive data is the least informative outcome and the most confidently over-read, and the heatmap is the visualization that makes it most tempting.

Making one honest

Say what the cells count. "Archive records" rather than "activity."

Show the load boundary. If the earliest loaded record is from March, days before that should be visually distinct from days with genuinely zero records. Rendering "not loaded" and "nothing happened" identically is the single most misleading thing a heatmap can do.

Fix the timezone and say which. Days depend on it, so a UTC-bucketed heatmap and a local-bucketed one differ at the edges.

Provide a table. Anyone quoting a figure should be able to read the number rather than estimate a shade — and screen reader users need it regardless.

Worth keeping

None of this argues against heatmaps. Density over time is genuinely hard to convey otherwise, and the format is well understood.

The argument is narrower: it is a strong visualization attached to weak data, and the mismatch is where over-reading happens. Labelling it accurately costs little and prevents the specific error the format invites.

Related tools

Related reading

Archive coverage varies and records may be incomplete. Verify important findings against original sources where available.