Sankey Chart Best Practices: Ten Rules for Clear Diagrams
Ten practical rules for a readable Sankey chart: one unit, few nodes, drawn losses, meaningful colour, direct labels and honest scale. With an editable marketing example.
A good Sankey diagram has one unit, few nodes, no hidden losses and labels you can read without a legend.
The example allocates a marketing budget to three channels and then shows how much of each channel's spend is attributed to leads and how much is not. It follows the rules below, and each rule has a reason you can see in it.
The rules are about what a reader needs: one scale, no hidden losses, and labels where the eye already is. None of them needs special software, only a few decisions made before the numbers go in.
Ten rules
- Use one unit for the whole diagram, and say what it is.
- Keep it to a handful of nodes per column. Merge the small ones into Other.
- Draw the losses. Anything that does not continue gets its own node.
- Make every node balance, or show the gap.
- Order columns left to right in the direction of flow, and keep one direction.
- Avoid loops. If something returns, split it into a separate node such as Rework.
- Use colour to mean something: a source, a group or good against bad. Not decoration.
- Label the bands and nodes directly, with the amount, instead of in a legend.
- Do not truncate or rescale: width must stay proportional to the amount.
- Say where the numbers came from and for which period.
What the rules buy you
In the example, paid takes half the budget but only 60% of its spend is attributed to leads, against 83% for content, which has a smaller budget. That comparison is visible because the 'no leads' share is drawn as a band of its own and the channels are not mixed with other groupings.
Key points
- Of the 100 spent, 63 is attributed to leads and 37 is not.
- Spend attributed to leads: content 25 of 30 (83%), paid 30 of 50 (60%) and events 8 of 20 (40%).
- Paid is the largest channel but not the one with the highest attributed share.
- The figures are invented.
The example’s data
Invented budget in thousands of euros, with each channel's spend split by whether it is attributed to leads. How spend is attributed is a modelling choice you would need to define.
| From | To | Amount (k€) |
|---|---|---|
| Marketing budget | Paid | 50 |
| Marketing budget | Content | 30 |
| Marketing budget | Events | 20 |
| Paid | Spend that produced leads | 30 |
| Paid | Spend that produced no leads | 20 |
| Content | Spend that produced leads | 25 |
| Content | Spend that produced no leads | 5 |
| Events | Spend that produced leads | 8 |
| Events | Spend that produced no leads | 12 |
The same data as CSV
source,target,value
Marketing budget,Paid,50
Marketing budget,Content,30
Marketing budget,Events,20
Paid,Spend that produced leads,30
Paid,Spend that produced no leads,20
Content,Spend that produced leads,25
Content,Spend that produced no leads,5
Events,Spend that produced leads,8
Events,Spend that produced no leads,12How it works
Fix the unit and the scope
Choose one unit and one period before you add any node.
Add the losses
Give every non-continuing quantity its own node.
Label for reading
Put names and amounts on the diagram so that nobody has to look in a legend.
Frequently asked questions
Should I show percentages or absolute values?
Absolute values on the diagram, with percentages in the text if you need them. Width is proportional to the absolute amount, so percentages on the bands can mislead.
How do I handle very small flows?
Group them into Other, or label them directly and accept that they will be thin.
Apply these rules to your own diagram
Open the example as your own chart and replace it with your data.