# Scatter Plume: 18 how-to guides (quadrants, animation, density…)

> Step by step: sort products into four families, animate the cloud over time, zoom in, put a flag inside each bubble, read thousands of points as density.

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

## How do I sort my products into four families ★?

Your management wants to know which products are drivers, niches or products to review.

1. Start from the step-by-step chart (Details = `Product`, X axis = `Orders`, Y axis = `Margin rate`).
2. **Quadrants ★** card: turn on **Show ★**. The cloud is split at the average of orders (631) and the average margin rate (43.2%).
3. **Quadrant names** group: **Top right** = "Drivers", **Top left** = "Profitable niches", **Bottom right** = "Low-margin volume", **Bottom left** = "To review".
4. Keep **Tint the top-right quadrant** on.

Result: the candle, the throw, the vase and the cushion are drivers; the lamp is a profitable niche; the bedding set is low-margin volume; the sofa, the table, the armchair and the shelf are to review.

> **Tip:** **Tip**: **Vertical split** = *Median of X* resists better to an outlier product that pulls the average.

## How do I split the cloud at a business threshold chosen by the reader ★?

The average moves with filters. Your controller wants a fixed margin threshold that readers can adjust.

1. **Modeling › New parameter › Numeric range**: name it `Margin threshold`, from 0.30 to 0.60, increment 0.01, default 0.45. Power BI creates the table and a slicer.
2. Create the measure:

```dax
// Value chosen in the slicer; 0.45 when nothing is chosen
Chosen threshold = SELECTEDVALUE ( 'Margin threshold'[Margin threshold], 0.45 )
```

3. **Quadrants ★** card: **Horizontal split** = *Fixed value*.
4. Drag `Chosen threshold` into **Dynamic format**, then right-click the field › **Rename for this visual**: `quadrants.yValue`.

Result: the horizontal line follows the slicer. At 0.45, the lamp (45%) sits on the line and the cushion (46%) is just above.

> **Warning:** **Warning**: the fixed value is in the unit of the measure: 0.45 for 45%, not 45.

## How do I label only the useful points?

Ten labels clutter; none leaves readers guessing. Choose which ones to show.

1. **Data labels** card: turn on **Show**.
2. **Labeled points** = *Selected*.
3. **Content** = *Name and Y value*.
4. Click a point, then Ctrl + click other ones.

Result: only the clicked points show their name and margin rate. For a permanent display, go back to *Largest (N)* and set **N**.

## How do I tell categories apart without relying on color?

Your report is printed in black and white, or read by color-blind people.

1. **Legend (series)** = `Category`.
2. **Points** card: **Shape** = *One shape per series*.
3. Keep **Outline** on: each shape stands out from its neighbors.

Result: Furniture, Decor and Textiles each have their shape (circle, square, diamond…), repeated in the legend. In Windows high contrast mode, one shape per series is enforced.

## How do I check whether two measures move together ★?

You want to know if the most ordered products are also the most profitable, and whether it holds in each category.

1. **Analytics** pane, **Trend ★** card: turn on **Show**.
2. Keep **Show R²** on.
3. Turn on **One trend per series** for one line per category.

Result: a rising line means "more orders, more margin". R² tells how closely points follow the line: close to 1, the relationship is strong; close to 0, there is none.

## How do I color points by a third measure ★?

Without a legend, you want color to show revenue, on top of size.

1. Remove the field from **Legend (series)** if there is one.
2. **Data colors** card: **Coloring** = *Gradient by a value ★*.
3. **Gradient value** = *Size*.
4. To change the palette: **Style** card, turn on **Customize colors**, then **Gradient palette** (e.g. *Viridis ★*).

Result: bubbles go from light to dark according to their revenue.

## How do I draw a target on each axis ★?

You aim for at least 500 orders and a 40% margin, and want to see who is in the target.

1. **Analytics** pane, **Reference lines ★** card, **Line 2** group: turn on **Show**, **Axis** = *X axis (vertical)*, **Value** = *Constant*, **Constant value** = 500, **Label** = "Volume target".
2. **Line 3** group: turn on **Show**, **Axis** = *Y axis (horizontal)*, **Value** = *Constant*, **Constant value** = 0.4, **Label** = "Margin target".
3. **Reference band** group: turn on **Show**, **Axis** = *Y axis*, **From** = 0.4, **To** = 0.6, **Label** = "Target zone".

Result: two dashed lines and a light band show the products that meet both targets.

## How do I filter the report on a group of points?

You want to see the sales detail of every product "to review".

1. Check that **Interactions › Select by drawing a rectangle** is on (default).
2. Drag the mouse diagonally around the points of the bottom-left quadrant.
3. To add more, hold Ctrl and draw a second rectangle.
4. To clear everything, click the chart background.

Result: the other visuals of the page are filtered on the selected products.


## How do I animate the cloud over time?

You want to show how each product moved, month after month.

1. Add a `Month` column to your table (a date on the first of the month) and one row per product and month.
2. Drag `Month` into **Play axis** (the column itself, not the *Date Hierarchy*). To read "Apr 2025" on the play bar, give the column the `mmm yyyy` format (**Column tools › Format**).
3. Below the chart, click ▶. Bubbles glide from one month to the next; the current month is written large in the background.
4. Click a bubble: it stays selected for every month and leaves a trail behind it. Play again to follow its path.
5. **Playback** card: **Duration of a frame (ms)** = 600 to speed up, **Loop** for a lobby screen.

Result: a "Gapminder-style" chart that tells the story without a table of figures.

## How do I zoom into a crowded corner of the cloud?

A few points squash the scale and the rest of the cloud is packed.

1. Hold Shift and draw a rectangle around the area you care about.
2. For fine control: **Zoom** card, turn on the X and Y sliders, then drag the window or its handles.
3. Double-click the chart (or the ⟲ button) to go back to the full view.

Result: the points of the area spread out and become readable; the other visuals of the page are not filtered.

## How do I label only some points?

You want to name the flagship products, and only them, regardless of their size.

1. Create the measure:

```dax
// Product name when revenue exceeds 50,000, blank otherwise
Flagship label =
IF ( [Revenue] > 50000, SELECTEDVALUE ( Products[Product] ) )
```

2. Drag it into **Label (text)**.

Result: only the products above 50,000 carry their name, even when the **Data labels** card is off. The text can be anything: "New", "To watch"…

## How do I make one point stand out ★?

You present your store against the network and want readers to find it at once.

1. **Highlight ★** card: **Highlighted points ★** = "Lyon store" (one name per line for several).
2. Keep **Other points in gray** and **Label highlighted points** on.

Result: your store keeps its color and its name; the others turn light gray. To let readers choose, use a measure in the **Highlight ★** field instead (for example `IF ( SELECTEDVALUE ( Stores[Store] ) = SELECTEDVALUE ( 'Choice'[Store] ), 1 )`).

## How do I compare the same cloud by channel ★?

You want to see whether the volume / margin relationship is the same in store and on the web.

1. Drag `Channel` into **Small multiples ★**.
2. **Analytics** pane, **Trend ★**: turn on **Show** and **Show the equation**.

Result: one small cloud per channel, with the same axes, each with its line and equation.

## How do I find customer families without defining them first ★?

You have 500 customers (purchase frequency, average basket) and look for profiles.

1. **Analytics** pane, **Automatic clusters ★**: turn on **Show**. Keep **Number of clusters** at 0.
2. **Confidence ellipses ★**: turn on **Show** to circle each cluster.
3. Click a cluster in the legend to filter the report on its customers.

Result: customers are split into a few colored clusters ("Cluster 1 (120)"…), circled and numbered. Rename them with **Cluster name** ("Profile").

## How do I compare planned and actual ★?

Each project has a budget (X) and an actual cost (Y): those above the diagonal overrun.

1. Put `Budget` in **X axis** and `Actual cost` in **Y axis**, `Project` in **Details**.
2. **Analytics** pane, **Symmetry and ratio ★**, **Symmetry shading** group: turn on **Show**, **Text where Y > X** = "Overrun", **Text where Y &lt; X** = "Under budget".
3. For two equal areas, set **X axis › Minimum** and **Y axis › Minimum** to 0 and the same **Maximum** on both axes.

Result: overrunning projects are in the "Overrun" tinted area; the diagonal marks the balance.

## How do I read a cloud of several thousand points ★?

With 7,000 orders, points overlap and you can no longer see where they concentrate.

1. **Density ★** card: turn on **Show ★**, **Points** = *Density instead of the points* (clickable cells). For a smooth heat map under the points, choose **Shape** = *Continuous (smooth gradient)* instead; for curves that do not hide the points, *Contour lines*.
2. **Marginal distributions ★** card: turn on **Show**.
3. If amounts are widely spread, switch **X axis › Scale** and **Y axis › Scale** to *Logarithmic*.

Result: dark cells (or the red core of the heat map) show where most orders are; the marginal histograms give the distribution of each measure. Clicking a hexagon selects its orders.

## How do I put a flag or a logo inside each point ★?

You compare countries (or brands) and want readers to recognize them without reading the labels.

1. Prepare a column that holds each image as base64. In Power Query, for a file: `Binary.ToText ( File.Contents ( "C:\Images\fr.png" ), BinaryEncoding.Base64 )`. A web address does not work: the visual never loads it.
2. Create the measure:

```dax
// Embedded image of the point's country (SVG here; data:image/png;base64, for a PNG)
Flag = "data:image/svg+xml;base64," & SELECTEDVALUE ( Countries[Flag base64] )
```

3. Drag `Flag` into **Image ★**.
4. **Points** card, **Images ★** group: **Minimum size of a point with an image (px)** = 30 so that small countries stay readable; turn off **Border in the series color** for a bare image.

Result: each bubble shows its flag, circled in the color of its continent; the bubble stays clickable like a normal point. Page "5 · Countries and flags ★" of the sample report shows this setup.

> **Note:** Beyond 5,000 points, images are not drawn (the points are then drawn in one block).

## How do I see where a point spent its time ★?

With the play axis, a line trail zigzags when a product changes a lot from one month to the next. You would rather see the area where it stays most often.

1. Keep `Month` in **Play axis** and click one or more points (Ctrl + click).
2. **Playback** card: **Trail style** = *Density ★*, or *Lines and density ★* to keep the path.
3. Without a play axis, the same idea exists for the selection: **Interactions** card, **Density around the selection** = *Points of the same series ★* (the whole series of the clicked point) or *Selected points ★*.

Result: a patch of color under the points shows the most frequent positions, across all dates; with several points from different series, each series has its own patch, in its color. Clicking the background clears the selection and the density.

## How do I draw margin-rate lines (y = a·x) ★?

With revenue on X and gross margin on Y, each line that starts at the origin is a margin rate: products above the "50%" line have a margin rate above 50%.

1. X axis = `Revenue`; Y axis = `Gross margin`; Details = `Product`.
2. **Analytics** pane, **Slope lines y = a·x ★** card, **Line 1** group: turn on **Show**, **Slope a (y = a·x + b)** = `0.3`, **Label** = `30%`.
3. **Line 2** group: turn on **Show**, **Slope a (y = a·x + b)** = `0.5`, **Label** = `50%`.
4. Optional, a computed slope: create the measure `Average rate = CALCULATE ( [Margin rate], REMOVEFILTERS ( Products ) )`, drag it into **Dynamic format** and rename it `slopes.a3`; turn on **Line 3**.

Result: two (or three) dashed lines start at the origin; at a glance, you see which products have a margin above the target rate. The lines stay correct on a logarithmic axis.

## How do I drill down from a category to its products?

One point per product is sometimes too many: start with the categories, then drill down.

1. Drag `Category`, then `Product`, into **Details (one point each)**.
2. The cloud shows one point per category. Turn on drill mode (the ↓ arrow in the visual header), then click a category: its products appear.
3. To see everything at once, choose **Expand all down one level** (⇊): one point per product, named "Category · Product".

Result: the same drill-down as in the native scatter chart, with Scatter Plume's quadrants, trend and styles.

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

When a slicer filters the report, the axes refit to the remaining points: two selections can no longer be compared. Pin the maximums with measures that ignore filters.

1. Create the measures:

```dax
X axis max =
CALCULATE (
    MAXX ( VALUES ( Products[Product] ), [Revenue] ),  -- the rightmost point…
    REMOVEFILTERS ( Products )                         -- …computed without any filter
)

Y axis max =
CALCULATE ( MAXX ( VALUES ( Products[Product] ), [Gross margin] ), REMOVEFILTERS ( Products ) )
```

2. Drag both measures into **Dynamic format**, then rename them for this visual `xAxis.max` and `yAxis.max`.
3. Filter with a slicer: the axes no longer move, only the points change.

Don't use `ALLSELECTED ()`: it follows slicers and cross-filters, so the scale would still move. To ignore just one filter, remove only the filtered column, for example `REMOVEFILTERS ( Products[Category] )`.

## Learn more

- [Getting started with Scatter Plume](/en/tutorials/nuage-de-points-quadrants): the data to prepare and a first visual, step by step.
- [Scatter Plume fields and settings](/en/tutorials/scatter-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: [Scatter Plume](/en/visuals/scatter-chart). A question? [Support](/en/support).
