Lasagna Plot
Stacked rows of colour-coded cells — one row per entity, one column per time step — that let you compare dozens of time series simultaneously without the spaghetti of overlapping lines.
// 01 — The chart
What it looks like
A lasagna plot comparing monthly temperatures across five cities. Darker cells indicate higher temperatures. Southern-hemisphere cities (Sydney) show inverted seasonality.
// 02 — Definition
What is a lasagna plot?
A lasagna plot is a heatmap organized as rows of time series. Each row represents an entity (person, city, sensor), each column is a time step, and colour intensity encodes the variable’s value.
The name comes from the layered, rectangular appearance — stacked colour strips that resemble lasagna noodles. It was coined in the medical statistics community for tracking patient lab values over time.
Lasagna plots solve the spaghetti problem: when you plot 20+ line charts on the same axes, lines overlap and become unreadable. By encoding values as colour instead of position, a lasagna plot can show hundreds of time series compactly.
// 03 — Anatomy
Parts of a lasagna plot
// 04 — Usage
When to use it — and when not to
- Comparing 10–200 time series that would overlap as line charts
- You want to reveal clusters of similar temporal patterns
- Tracking patient lab values, sensor readings, or employee metrics over time
- Row ordering matters — sorting rows by a summary stat can reveal structure
- Your data is dense (few missing values) on a regular time grid
- Precise value reading matters — colour intensity is imprecise
- You have only 2–3 time series — just use line charts
- Time steps are irregular — gaps create confusing blank cells
- Your audience is unfamiliar with heatmap-style encodings
- The variable is categorical, not numeric
// 05 — Reading guide
How to read a lasagna plot
Check the colour legend
Understand the mapping from colour intensity to value. Light usually means low; dark means high.
Scan rows for outliers
Look for rows that are uniformly dark or light — these entities behave differently from the rest.
Look for vertical stripes
Columns that are uniformly dark indicate time points where all entities had high values (e.g. a system-wide event).
Check row ordering
If rows are sorted (e.g. by average value), the gradient from top to bottom reveals ranking.
Look for temporal patterns within rows
Repeating dark-light-dark patterns within a row suggest periodicity for that entity.
// 06 — Data format
What data you need
A matrix with entities as rows and time steps as columns. Each cell is a numeric value. Alternatively: long-format with entity, date, and value columns.
// 07 — Construction
How to build one
Step 1: Arrange data as a matrix: one row per entity, one column per time step.
Step 2: Map values to a sequential colour scale (e.g. white → dark red).
Step 3: Draw each cell as a coloured rectangle. Use thin gaps or borders between rows.
Step 4: Sort rows by a meaningful criterion (average, peak, or cluster) to reveal patterns.
// 08 — Common mistakes
Mistakes to avoid
Random row ordering
Unsorted rows hide patterns. Always sort rows by a summary statistic or cluster assignment.
Rainbow colour scales
Rainbow scales introduce perceptual artefacts. Use sequential single-hue or diverging scales.
Too many time steps
When columns are sub-pixel wide, the chart becomes noise. Aggregate to a coarser granularity.
Missing legend
Colour intensity is meaningless without a legend mapping it to actual values.
// 09 — Real-world examples
Where you’ll see them
Clinical trials
Tracking patient lab results (blood pressure, cholesterol) over visit dates — each row is a patient.
Server monitoring
CPU utilisation across hundreds of servers, with rows sorted by average load.
Sports analytics
Player performance metrics across games in a season, with rows sorted by total contribution.
// 10 — Quick reference
Key facts
// 11 — Accessibility
Making it accessible
Use a colourblind-safe sequential palette (e.g. viridis). Add tooltips showing exact values on hover. Provide a downloadable data table. Use ARIA labels to summarise overall patterns (e.g. “highest values concentrated in summer months”).
// 12 — Variations
Common variations
Clustered lasagna
Rows grouped by cluster membership, with divider lines between groups.
Diverging lasagna
Uses a diverging colour scale to show values above and below a reference (e.g. mean).
Sorted lasagna
Rows re-ordered by a summary statistic so similar entities are adjacent.
Interactive lasagna
Hover reveals exact values; click a row to show its line chart overlay.
// 13 — FAQs
Frequently asked questions
What is a lasagna plot?+
A lasagna plot is a heatmap organized as rows of time series. Each row represents an entity (person, city, sensor), each column is a time step, and colour intensity encodes the variable's value.
When should you use a lasagna plot?+
Use a lasagna plot when comparing 10–200 time series that would overlap as line charts. It also works well when you want to reveal clusters of similar temporal patterns, and when tracking patient lab values, sensor readings, or employee metrics over time.
When should you avoid a lasagna plot?+
Avoid a lasagna plot when precise value reading matters — colour intensity is imprecise. It is also a poor fit when you have only 2–3 time series — just use line charts, or when time steps are irregular — gaps create confusing blank cells.
What data do you need to make a lasagna plot?+
A matrix with entities as rows and time steps as columns. Each cell is a numeric value. Alternatively: long-format with entity, date, and value columns.
How is a lasagna plot different from a heatmap?+
Both a lasagna plot and a heatmap can look similar at first glance, but they answer different questions. Reach for a lasagna plot when the comparisons and patterns it was designed to reveal match what you need to communicate, and choose a heatmap when its particular strengths better fit your data and audience.
What is another name for a lasagna plot?+
Lasagna Plot is also known as Lasagna chart, time-series heatmap. The name varies between fields, but the visualisation technique is the same.
What size of dataset works best for a lasagna plot?+
Lasagna Plot works best for 10–200 entities with regular time steps. Outside that range the chart either looks empty or becomes too cluttered to read clearly.
Are lasagna plots accessible to screen readers?+
Use a colourblind-safe sequential palette (e.g. viridis). Add tooltips showing exact values on hover. Provide a downloadable data table. Use ARIA labels to summarise overall patterns (e.g. "highest values concentrated in summer months").