b2KIT

Ridgeline / Joy Plot Builder

Create overlapping density plots (ridgeline/joy plots) to compare distributions across groups.

Tested tool guide Tested browser tools Checked August 16, 2026

What Ridgeline / Joy Plot Builder does, with a checked example

Paste a table with a group column and a value column, and this tool draws one smoothed density curve per group, then stacks the curves vertically with a slight overlap so the whole figure reads as a skyline. Each curve is a kernel density estimate: a smoothed histogram that shows where values cluster. The surprise for most first-time users is that every curve is normalized to the same area, so a group with ten observations can tower over a group with ten thousand. Ridgeline plots show where distributions sit and how wide they are, not how much data sits behind them.

Worked example

A concrete input and expected output from the current implementation.

Input

group,value
Control,2
Control,3
Control,4
Control,5
Control,6
Treatment,7
Treatment,8
Treatment,9
Treatment,10
Treatment,11

Expected output

A ridgeline plot with two stacked rows, Treatment above Control. The Control curve is a single peak at 4, with its mass over the values 2-6; the Treatment curve is a single peak at 9, with its mass over the values 7-11. The two curves overlap slightly where their ranges meet, around 7.

Each group's values are symmetric about the midpoint of its range, so the density estimate is symmetric there and peaks exactly at that midpoint (4 and 9) regardless of the smoothing bandwidth. The mild overlap near 7 happens because each curve extends a bit past its last data point.

How the result is produced

1

Parsing and density estimation

The tool splits pasted text into rows and expects a group column and a value column, with the first row as the header. For each group it runs a kernel density estimate: every observed value contributes a smooth bump, the bumps are summed, and the result is normalized so the curve integrates to 1. A default bandwidth governs smoothness; wider bands flatten detail, narrower bands follow the data closely.

2

Stacking and layout

Rows are ordered by the group column's sort order, with an option to order by each group's median. Each subsequent row is drawn offset upward so it overlaps the row below by a small fraction of its height, keeping peaks visible in a compact figure. Within a row, the vertical axis is that group's density; the horizontal axis is the shared value scale.

Good uses

  • Tracking drift over time: paste measurements grouped by month or batch and read whether a process's distribution shifts, widens, or becomes bimodal across periods.
  • Comparing test or survey scores across demographic groups when you suspect sub-populations: a boxplot hides two peaks, a ridgeline shows them.
  • Condensing many categories into one figure for a report: response times by service, prices by category, or expression levels by condition, all as a single skyline.

Limits and checks

  • Row height says nothing about sample size. Densities are normalized to area 1 per group, so a group with five values can look as prominent as one with five thousand.
  • The default bandwidth can hide or invent structure. With small samples, genuine bimodality may be smoothed away; with unusual spacing, spurious bumps can appear. Judge the shape, then adjust the bandwidth if the tool offers the control.
  • The overlap offset is a readability convention, not data. A curve can sit visually inside a neighbor's area, and vertical positions mean nothing outside their own row. Compare horizontally, on the shared value axis.

Common questions

The group with the most rows doesn't look the biggest. Is something broken?

Probably not. Each row is a density normalized so the area under the curve is 1, so height reflects how tightly values cluster, not how many there are. If sample size matters, annotate rows with counts, or order by median so the eye reads sequence rather than mass.

Why is it called a joy plot?

The name comes from the cover of Joy Division's 1979 album Unknown Pleasures, which shows stacked pulses of radio emission from pulsar CP 1919. The visual resemblance gave the chart type its nickname. Claus Wilke's ggridges package for R introduced the descriptive alternative 'ridgeline plot'.

References and verification

The example and behavioral notes were checked against the browser implementation. Standards and primary references below define the relevant format, formula, or platform behavior.

Related Tools