# 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.

- Language: English
- Web page: https://plumevisuals.com/en/tutorials/ridgeline-plume-cas-pratiques
- Published: 2026-10-14
- Visual: Ridgeline Plume, technical reference: https://plumevisuals.com/ai/visuals/ridgeline-pulse.md
- If an option name in this tutorial differs from the technical reference, the reference is right (it is generated from the visual's code).

These recipes assume you already have a Ridgeline Plume in place. If not, start with the [getting started guide](/en/tutorials/ridgeline-climatique): 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:
   ```dax
   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.
   ```dax
   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):
   ```dax
   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:
   ```dax
   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:

```dax
Fixed scale =
CALCULATE (
    MAXX ( VALUES ( Weather[DayOfYear] ), [Smoothed temp 7d] ),  -- the highest value…
    REMOVEFILTERS ( Weather[Year] )                              -- …across all years
)
```

2. **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`).
3. 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

- [Getting started with Ridgeline Plume](/en/tutorials/ridgeline-climatique): the data to prepare and a first visual, step by step.
- [Ridgeline Plume: every field and setting explained](/en/tutorials/ridgeline-plume-champs-et-reglages): each field well and each setting.
- [Getting started with Plume visuals](/en/tutorials/bien-demarrer-visuels-plume): installation, license, styles and settings shared by all visuals.
- The visual's page: [Ridgeline Plume](/en/visuals/ridgeline-pulse). A question? [Support](/en/support).
