Skip to content
Plume Visuals
← Back
How-to guidesIntermediate7 min read· Published on October 14, 2026

Ridgeline Plume: 8 how-to guides (Unknown Pleasures, normals, animation…)

Histogram per group, the Unknown Pleasures look, top 10 years, deviation from the normal, year-by-year animation and annotations, step by step.

Lire en français

These recipes assume you already have a Ridgeline Plume in place. If not, start with the getting started guide: the examples reuse its data. Features marked ★ are premium: they work without a license, with a watermark.

How do I compare distributions (a histogram per group)?

You want to see whether one warehouse delivers more slowly than another: not just the average, but the whole spread of delivery times.

  1. In your Orders table (one row per order, with Warehouse and DeliveryDays), create a calculated column that puts each order in a bin:
    Delivery bin = INT ( Orders[DeliveryDays] )   -- 0, 1, 2, 3… days (whole part of the delivery time)
    
  2. Create the height measure: the share of the warehouse's orders that falls in each bin.
    Share of orders =
    DIVIDE (
        COUNTROWS ( Orders ),                                          -- orders from this warehouse in this bin
        CALCULATE ( COUNTROWS ( Orders ), ALL ( Orders[Delivery bin] ) )   -- all orders from this warehouse
    )
    
  3. Drag Warehouse into Ridge (one per value), Delivery bin into X axis, Share of orders into Height.
  4. Format › Ridges › Curve: Smooth. Height scale: Shared by all ridges.
  5. Format › Sort › Ridge order: By mean ↓.

Result: one hill per warehouse. A slow warehouse has a hill shifted to the right; an inconsistent warehouse, a wider, flatter hill. Because the height is a share, warehouses of different sizes remain comparable.

How do I get the "Unknown Pleasures" look?

You want the Joy Division album cover: white lines on a black background, each ridge hiding the ones behind it.

  1. Format › Frame › Background: on. Color: #000000.
  2. Format › Data colors › Color by: Single color. Color: #ffffff.
  3. Data colors › Apply color to: Crest line only.
  4. Data colors › Hide ridges behind (opaque): on. Color under the line: #000000.
  5. Ridges › Overlap (%): 350.
  6. Turn off the toggle on the Category labels, X axis and Legend cards.

Result: the album cover look, in the free version. The style Format › Style › Style = Unknown Pleasures ★ produces this look in a single choice.

How do I sort ridges by mean and keep only the 10 hottest years?

A 70-year ridgeline is beautiful but dense; for a clear message, show only the extremes.

  1. Drag Avg max temp into the Order field.
  2. Format › Sort › Ridge order: By 'Order' field ↓. Result: the hottest year at the top (free).
  3. Sort › Keep N ridges (0 = all) ★: 10.
  4. Sort › Keep: Top N by 'Order'.

Result: the 10 hottest years, from hottest to least hot. A variant that removes no ridges: Analytics pane › Reference & analytics › N extreme ridges (0 = off) = 10 ★ keeps these years in color and turns the others gray.

How do I compare each year with a normal? ★

You want to see, day by day, when each year was warmer or colder than usual.

  1. Create the reference measure (here the average of the first ten years):
    Normal 1995-2004 =
    CALCULATE (
        [Smoothed temp 7d],                -- the same measure as the height…
        Weather[Year] >= 1995,             -- …calculated over the years 1995…
        Weather[Year] <= 2004              -- …to 2004, whatever the ridge's year
    )
    
  2. Drag Normal 1995-2004 into the Reference ★ field. A dashed curve appears on each ridge.
  3. Open the Analytics pane, Reference & analytics ★ card › Color the gap to reference: on.

Result: on each ridge, the parts above the normal turn red and those below turn blue. Variant: create Anomaly = [Smoothed temp 7d] - [Normal 1995-2004], put it in Color and choose the Plume (diverging) palette (turn on Style › Customize colors, then Gradient palette).

How do I tell the story year after year? ★

In a meeting, an animation that draws the years one by one makes more of an impression than a static chart.

  1. Format › Playback ★ › Time per ridge (ms): 150 (for 30 years).
  2. Big counter in background: on. The year is shown in large type behind the ridges.
  3. Pause on annotated ridges: on, if you have annotations.
  4. Click the visual's ▶ button.

Result: the ridges are drawn year after year. Drag the progress bar to go back to a year. To have the other visuals follow the year being played, turn on Current ridge filters the report.

How do I show "you are here" when a slicer filters the page? ★

A year slicer on the page filters the ridgeline: only one ridge is left and you lose the comparison. You want to keep all the years and mark the selected one.

  1. Select the year slicer.
  2. In the ribbon, on the Format tab, click Edit interactions.
  3. Above the ridgeline, click the Highlight icon (instead of Filter). Click Edit interactions again to leave this mode.
  4. In the ridgeline, Format › Interactions › Highlighted ridges: Cursor only ★.
  5. Interactions › Cursor style ★: Arrow on label. Cursor label: Selected year.

Result: all the ridges stay visible and the year chosen in the slicer is marked with an arrow. Another method, without editing interactions: create a disconnected table YearCursor = SELECTCOLUMNS ( GENERATESERIES ( 1995, 2024, 1 ), "Year", [Value] ), use it as a slicer, then drag the measure Selected year = SELECTEDVALUE ( YearCursor[Year] ) into the Cursor: current ridge ★ field.

How do I flag an event on a ridge? ★

You want to write "Heat wave" on the 2019 ridge, at the date of the peak.

  1. Create the measure:
    Event =
    IF (
        SELECTEDVALUE ( Weather[Year] ) = 2019                -- on the 2019 ridge…
            && SELECTEDVALUE ( Weather[DayOfYear] ) = 206,    -- …on July 25
        "Heat wave",                                          -- write this text
        BLANK ()                                              -- nothing anywhere else
    )
    
  2. Drag Event into the Annotation text ★ field.
  3. Format › Annotations ★ › Style: Bubble.

Result: a "Heat wave" bubble is attached to the 2019 ridge, on July 25. With an events table, replace the IF with a lookup of the text of that day's event.

How do I explore one year in detail? ★

The ridgeline shows the overall shape; focus mode gives the exact values for one year.

  1. Double-click the 2003 ridge. The other ridges disappear, and 2003 grows, with an X axis and a Y axis.
  2. Click the ▶ arrow (next ridge) to move to 2004 without going back to the ridgeline.
  3. Click ← Back (or press Esc) to return to the ridgeline.

To keep the other years in the background, turn on Format › Focus mode ★ › Keep other ridges as ghosts. The focus and the chosen mode are saved by bookmarks.

How do I compare every year on the same axes? ★

Offset ridges show the shape of each year; to see whether 2003 and 2022 stand out, you have to overlay them on the others.

  1. Format › Layout › Display mode: Comparison (overlay) ★.
  2. Comparison ★ card, Ridges in color group: Ridges in color (names) = 2003; 2022.
  3. Other ridges group: turn on In gray (spaghetti).
  4. Reference group: Reference curve = Median of all ridges; turn on Color the gap to the reference.

Result: every year in thin gray on the same axes, 2003 and 2022 in color, the median as a benchmark and the gap shaded above and below. Ctrl + click on a ridge adds it to the colored ridges.

How do I keep the same scale when filtering?

A decade slicer removes years: the height scale refits to the remaining ridges, and two decades can no longer be compared.

  1. Create the measure:
Fixed scale =
CALCULATE (
    MAXX ( VALUES ( Weather[DayOfYear] ), [Smoothed temp 7d] ),  -- the highest value…
    REMOVEFILTERS ( Weather[Year] )                              -- …across all years
)
  1. Format › Y axis › Range › End (empty = auto): click the fx button, then Field value and the Fixed scale measure (or drag the measure into Dynamic format and rename it yAxis.max).
  2. Filter: the ridge heights no longer change from one decade to the next.

Don't use ALLSELECTED (): it follows slicers, so the scale would still move. REMOVEFILTERS ( Weather ) (or ALL ( Weather )) ignores every filter. Same idea for yAxis.min.

Learn more