A beeswarm chart in Power BI: every item, with no overlap
Get started with Beeswarm Plume: prepare a table, create the measure, insert the visual, compare groups, read the median and each dot's rank, and select with a rectangle.
Lire en françaisIn short
What is a beeswarm chart? It is a chart where every item is a dot: every store, every customer, every order. The dot sits at its exact value along an axis; when several dots have close values, they push each other aside instead of hiding, like bees around a hive. The shape of the swarm shows the distribution: where most items are, and which ones stand out.
A small example. Twelve stores make between $0.4 million and $2.1 million in sales. A histogram would say "five stores between 0.8 and 1.2 million". The swarm shows those five stores side by side, and you can hover each one to read its name, its value and its rank.
- What the visual does. Beeswarm Plume places every dot so that none covers another, always the same way (the picture does not change at every refresh). It compares groups (one band per region), colors by category, sizes by a measure, draws the median and the mean. Premium (★): the play axis that animates the dots from one year to the next, quartiles, groups sorted by median, box plot, violin, raincloud, comparison of each dot with last year, in-visual search, small multiples, images inside dots.
- When to use it. To see individuals and their spread: sales by store, lead time by order, salary by position, grade by student, price by town.
- When to use something else. To compare the totals of a few categories: Bar Plume. For the relationship between two measures: Scatter Plume.
- What you will learn. Prepare a table with one row per item, create the measure, insert the visual, split groups, color, read the median and the rank, select dots.
- What you need: Power BI Desktop, the Beeswarm Plume visual installed (see the common basics), a table with a name and a value. The sample report PlumeBeeswarm-Sample-EN, in your "Downloads" area, shows 240 fictitious stores (page 1), store formats and delivery lead times (page 2), the ★ features (page 3) and the price per m² of 120 towns from 2015 to 2025 with the play axis ★ (page 4).
The data to provide
The shape. One row per item (or several rows that the measure adds up): the item name, optionally its group and its category, and a numeric value.
| Store | Region | Format | Sales |
|---|---|---|---|
| Bordeaux Lac | Nouvelle-Aquitaine | Out of town | 1,820,000 |
| Pessac | Nouvelle-Aquitaine | Downtown | 640,000 |
| Mérignac | Nouvelle-Aquitaine | Out of town | 1,310,000 |
| Rennes Alma | Bretagne | Out of town | 1,540,000 |
| Vannes | Bretagne | Downtown | 580,000 |
| Brest | Bretagne | Out of town | 980,000 |
| Toulouse Blagnac | Occitanie | Out of town | 2,100,000 |
| Albi | Occitanie | Downtown | 470,000 |
| Montpellier | Occitanie | Downtown | 910,000 |
| Metz | Grand Est | Out of town | 1,120,000 |
| Nancy | Grand Est | Downtown | 720,000 |
| Reims | Grand Est | Downtown | 860,000 |
To try without a file: Modeling › New table, then paste:
Stores =
DATATABLE (
"Store", STRING, "Region", STRING, "Format", STRING, "Sales", DOUBLE,
{
{ "Bordeaux Lac", "Nouvelle-Aquitaine", "Out of town", 1820000 },
{ "Pessac", "Nouvelle-Aquitaine", "Downtown", 640000 },
{ "Mérignac", "Nouvelle-Aquitaine", "Out of town", 1310000 },
{ "Rennes Alma", "Bretagne", "Out of town", 1540000 },
{ "Vannes", "Bretagne", "Downtown", 580000 },
{ "Brest", "Bretagne", "Out of town", 980000 },
{ "Toulouse Blagnac", "Occitanie", "Out of town", 2100000 },
{ "Albi", "Occitanie", "Downtown", 470000 },
{ "Montpellier", "Occitanie", "Downtown", 910000 },
{ "Metz", "Grand Est", "Out of town", 1120000 },
{ "Nancy", "Grand Est", "Downtown", 720000 },
{ "Reims", "Grand Est", "Downtown", 860000 }
}
)
The measure. The Value well expects a measure (a calculation Power BI redoes for the current filters, written in DAX; see the glossary). The visual computes it for each store:
Total sales = SUM ( Stores[Sales] ) -- computed for each store of the Details field
Pitfalls.
- Details sets what a dot stands for. Without Details, Power BI adds everything up: a single dot per group.
- If two stores share a name in different regions, add a second field to Details (a store code): both fields are combined.
- A blank value is not placed (the dot does not show). With a logarithmic scale, zero and negative values are not placed either (a message says so in edit mode).
Step by step: your first swarm in 10 minutes
- In the Visualizations pane, click the Beeswarm Plume icon. A frame appears with a landing page listing the fields to drop; enlarge it.
- Drop
Stores[Store]into Details (one dot each), then theTotal salesmeasure into Value. One dot per store appears, with the median as a black line and the automatic title "Total sales by Store". - Drop
Stores[Region]into Group (one band each). Each region gets its band, its name and its dot count ("n = 3"); the dots take the color of their region. - Drop
Stores[Format]into Legend (color). Colors now tell the formats apart; a legend appears at the top. - Hover a dot: the tooltip gives the store, region, format, sales and the store's rank in its region ("1 of 3 · percentile 100").
- Hover the median of a region: the tooltip gives the number of dots, the minimum, the quartiles, the median, the mean and the maximum of the region.
- Click a dot: it is selected (and labeled), the others fade, and the other visuals of the page are filtered. Ctrl + click adds more; a click on empty space clears.
- Drag the mouse over an empty area of the swarm: a rectangle selects every dot inside it.
- In Format › Statistics › Markers, turn on Mean and Write the marker values: the mean is added as a dotted line, and each marker shows its value.
- In Format › Data labels, turn on Show: the minimum and maximum of each region are named.
With many dots, they all shrink together so that the swarm fits in its band (Format › Swarm › Dots › Shrink dots so that everything fits). Enlarge the visual to get bigger dots again.
Troubleshooting
| What you see | Likely cause | Fix |
|---|---|---|
| A single dot (or one per group) | Nothing in Details | Drop the item name into Details |
| Fewer dots than expected | Some values are blank, or two items share a name | Check the measure; add a code to Details |
| Tiny dots | Many dots in a small band | Enlarge the visual, use fewer groups, or switch Layout to Random jitter |
| "Nothing to place" | The measure is blank for every item | Check the measure and the page filters |
| Message "zero or negative value(s) not placed" | Logarithmic scale | Set Format › Value axis › Scale back to Linear |
| "Premium preview" watermark | A ★ feature is used (play axis, quartiles, median sort, box, violin, sieve, search, ★ shape…) | Normal without a key; see the common basics for licensing |
| Groups in the wrong order | Power BI data order | Format › Swarm › Groups (bands) › Group order: number of dots or name (or median ★) |
Key takeaways
- One dot per value of the Details field, at its exact value, with no overlap, always the same picture.
- Group splits the bands, Legend colors, Size sizes.
- Median by default; mean in one click (quartiles ★); hover a marker for the group statistics.
- Click, Ctrl + click, rectangle, click a group or legend name: the selection filters the report.
Going further
- Use cases: animate dots with the play axis ★, compare with last year, raincloud, search…
- Fields and settings: every Format pane setting.
- Getting started with Plume visuals: installation, license, styles, dynamic formatting.
- The Beeswarm Plume page and support.