# Bar Plume: 8 how-to guides (variance arrows, target, Top N…)

> Match a native bar chart, compare 2025 with 2024 using variance arrows, show actuals vs. target in %, keep the top 5 and group the rest: step-by-step recipes.

- Language: English
- Web page: https://plumevisuals.com/en/tutorials/bar-plume-cas-pratiques
- Published: 2026-10-14
- Visual: Bar Plume, technical reference: https://plumevisuals.com/ai/visuals/bar-chart.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 start from a Bar Plume chart that is already set up. If that's not the case, begin with [getting started](/en/tutorials/barres-top-n-objectif): the examples reuse its data. Features marked ★ are premium: they work without a license, with a watermark.

## How do I reproduce a native bar chart?

You are replacing a native visual with Bar Plume and want the same look. Two settings are enough, in **Format › Layout**.

| Native visual | Series | Orientation |
|---|---|---|
| Stacked bar chart | *Stacked* | *Bars (horizontal)* |
| Stacked column chart | *Stacked* | *Columns (vertical)* |
| Clustered bar chart | *Clustered (side by side)* | *Bars (horizontal)* |
| Clustered column chart | *Clustered (side by side)* | *Columns (vertical)* |
| 100% stacked column chart | *100% stacked* | *Columns (vertical)* (*Bars* for the 100% stacked bar chart) |

1. Drag the same fields as in the native visual: its category **Y-axis** or **X-axis** goes into **Category**, its **Legend** into **Legend (series)**, its values into **Values**.
2. In **Layout**, set **Series** and **Orientation** according to the table.
3. To keep the bar order of the original visual, set **Sort › Sort by**.

Result: the same chart, with Bar Plume's options on top.

## How do I compare 2025 with 2024 using variance arrows? ★

Your management wants to see, region by region, whether the year is growing, and by how much.

1. Category = `Region`; Values = `Revenue 2024`, then `Revenue 2025` (in that order).
2. **Layout › Series** = *Clustered (side by side)*; **Orientation** = *Columns (vertical)*.
3. **Variance arrows ★** card: turn on **Show ★**.
4. **Compare** = *2nd series to the 1st, within each group*.
5. **Show the variance** = *In %*.

Result: above each pair, a green or red arrow with the change (London: +11.0%, North West: +12.0%, Wales: +8.3%).

> **Tip:** **Tip**: for a sequence of months, keep a single series and choose **Compare** = *Each category to the previous one*: each column shows its change from the month before.

## How do I show actuals vs. target with the variance in %? ★

You track sales targets and want to see at a glance who is reaching them.

1. Category = `Region`; Values = `Revenue`; Target = `Target`.
2. **Target** card: **Marker** = *Ghost bar* (the dotted outline of the bar to reach).
3. **Variance to target** = *In % ★*.
4. Keep **Color when reached** and **Color when missed**, or pick your brand colors.
5. For costs or lead times, turn on **Lower is better**.

Result: each bar carries its target and the colored variance (e.g., London: +3.8%, Wales: -2.1%). The tooltip repeats the revenue, the target and the variance.

> **Warning:** **Warning**: with several measures side by side, the variance is calculated on the first one; in *Stacked*, on the stack total.

## How do I keep the top 5 and group the rest? ★

With 40 products, the chart becomes unreadable. You want the top 5 and one bar for the rest.

1. Category = your `Product` column; Values = `Revenue`.
2. **Sort** card: turn on **Top N ★**.
3. **N** = 5.
4. Leave **Group the rest into "Others"** on; in **"Others" label**, type "Other products".

Result: 6 bars, including "Other products", which adds up the remaining 35. Clicking that bar filters the report on those 35 products. In small multiples, the Top N is calculated within each panel.

> **Warning:** **Warning**: "Others" is a **sum**. For a rate or an average, turn off **Group the rest into "Others"**.

> **Tip:** **Tip**: to let readers choose N, create a numeric range parameter (**Modeling › New parameter › Numeric range**), then a measure `Top N value = SELECTEDVALUE ( 'Number of products'[Number of products], 5 )` dragged into **Dynamic format** and renamed `sort.n` (right-click › **Rename for this visual**).

## How do I force the series order (Web before Store)?

By default, series follow the model order. Your style guide wants web always first, at the bottom of each stack.

1. Category = `Region`; Legend (series) = `Channel`; Values = `Revenue`; **Layout › Series** = *Stacked*.
2. **Sort** card, **Series** group: **Series order** = *Custom*.
3. **Names in order (separated by ;)**: `Web; Store`.
4. Turn on **Legend in the visual order of stacks** so the legend reads in the same direction as the segments.

Result: the Web segment is the first in each stack, and each channel keeps its color.

## How do I show the value and share of each segment?

In a stacked column chart, you want to read both "930K" and "36% of the region" (web in London, both years combined).

1. Category = `Region`; Legend (series) = `Channel`; Values = `Revenue`; **Layout › Series** = *Stacked*.
2. **Data labels** card: turn on **Show**.
3. **Content** = *Value and share of the category*.
4. **Hide below (% of the category)** = 5: labels on very small segments disappear.

Result: each segment shows its value and its share of the region; the total stays at the end of the stack.

> **Tip:** **Tip**: in *100% stacked*, turn on **Total at the end of 100% bars ★** to keep the actual total of each category, which Power BI can't display.

## How do I stack by channel and cluster by year? ★

For each region, you want a 2024 stack and a 2025 stack, split by channel.

1. Category = `Region`; Legend (series) = `Channel`; Values = `Revenue 2024`, then `Revenue 2025`.
2. **Layout › Series** = *Stacked and clustered ★*.
3. **Data labels** card, **Totals** group: leave **Total at the end of stacks** on.

Result: two stacks per region, one per measure, each split into Store and Web; each stack has its total. Without a Legend, you can choose the stack for each measure yourself: **Per-series settings** card, **Apply settings to** = the series, then **Stack (stacked and clustered)** = *Stack 1*, *Stack 2*…

## How do I draw actuals inside the plan?

A wide, light bar for the target, a thin, dark bar for actuals, in the same place: it reads instantly.

1. Category = `Region`; Values = `Target`, then `Revenue` (the target first).
2. **Layout › Series** = *Overlapped*.
3. **Overlap** group: **Drawing order** = *Series order*; turn on **Following series narrower**.
4. **Data colors** card: give `Target` a light gray.

Result: each region shows a thin bar (revenue) inside a wide bar (the target). To fine-tune the width, use **Per-series settings › Relative width (%, 0 = automatic)**.

## How do I animate a bar chart race? ★

You want to show regions overtaking each other from one year to the next, like the bar chart races seen in the media.

1. Category = `Region`; Values = `Revenue`; drag `Year` into **Play axis ★**. A play bar appears below the chart.
2. **Bar chart race ★** card: **Bar order** = *Ranking at each frame (re-sort)*; **Bars shown (Top N of each frame)** = *10*.
3. **Playback ★** card: **Duration of a frame (ms)** = *1500*; turn on **Loop** if the report runs on a screen.
4. Optional: drag into **Image (base64) ★** a measure that returns one image per region (logo, flag), formatted as `"data:image/svg+xml;base64," & …`; **Bar chart race ★** card, **Image shape** = *Circle*.
5. Click ▶ in the play bar.

Result: at each year, bars glide to their new rank and values count up to the new figure; the current year is written in large type in a corner. Each region keeps its color throughout the race.

## How do I keep the same scale when filtering?

When a slicer filters the report, the value axis refits to the remaining bars: two selections can no longer be compared at a glance. Pin the axis maximum with a measure that ignores filters.

1. Create the measure:

```dax
Axis max =
CALCULATE (
    MAXX ( VALUES ( Sales[Region] ), [Revenue] ),  -- the largest bar…
    REMOVEFILTERS ( Sales )                        -- …computed without any filter
)
```

2. Drag `Axis max` into the **Dynamic format** field, then rename it for this visual `valAxis.max` (the **Value axis › Maximum** setting).
3. Filter with a slicer: the axis keeps the same bound, and the bars shrink instead of filling the whole height.

Don't use `ALLSELECTED ()`: it follows slicers and cross-filters, so the scale would still move. `REMOVEFILTERS ( Sales )` (or `ALL ( Sales )`) ignores every filter; to keep only one filter, remove just the columns filtered by the slicer, for example `REMOVEFILTERS ( Sales[Channel] )`. Same idea for `valAxis.min`.

## Learn more

- [Getting started with Bar Plume](/en/tutorials/barres-top-n-objectif): the data to prepare and a first visual, step by step.
- [Bar Plume fields and settings](/en/tutorials/bar-plume-champs-et-reglages): every field well and every setting.
- [Getting started with Plume visuals](/en/tutorials/bien-demarrer-visuels-plume): installation, license, styles and shared settings.
- The visual's page: [Bar Plume](/en/visuals/bar-chart). A question? [Support](/en/support).
