Your data
Paste a table straight from Excel or Google Sheets, or drop a CSV file. Nothing is uploaded anywhere — the whole calculation runs inside this browser tab.
CSV, TSV or plain text. Files saved in windows-1251 are detected and re-read automatically, so Cyrillic headers do not turn into garbage.
Parsing options
Columns
Result
Save and share
The drawing library is downloaded only when you press the button, and only on this page.
This page has no server side at all. The table you paste is parsed by JavaScript inside your own browser, the chart is drawn on a canvas element on your machine, and the export file is assembled locally. Nothing is uploaded, stored or written to any log. You can disconnect from the network after the page has loaded and everything will still work — which is the simplest way to verify the claim yourself.
Facts and limits of this method
| Best for | Comparing composition across categories of very different size |
|---|---|
| What it hides | The totals, completely and by design |
| Normalisation | Each row is divided by the sum of its absolute values, then multiplied by 100 |
| Segment limit | Five; below about 3% a segment stops being visible |
| Axis | Fixed 0–100%, never data-driven |
| Export contents | Percentages, not the original values — the CSV export carries what the chart shows |
When it misleads you
- Losing the totals is the whole point, and it is also the danger. A segment can grow from 20% to 40% while shrinking in absolute terms, simply because everything else shrank faster. Always show the totals somewhere near the chart.
- The same middle-segment problem as ordinary stacking applies: only the bottom band and the top edge sit on fixed lines. Bands in between float.
- Rows whose values sum to zero cannot be normalised and are drawn as empty. That is correct behaviour, but it means an all-zero period silently vanishes from the comparison.
- Negative values are normalised by absolute value, which keeps the geometry intact but makes the percentages hard to interpret. Mixed signs belong in a different chart type.
How it is calculated
Each row is normalised independently: every value is divided by the sum of the absolute values in that row and multiplied by 100. The rescaling is done in the tool rather than left to the chart library, so the numbers in the tooltip and in the exported file are the percentages you actually see.
The vertical axis is pinned to 0–100 and never adapts to the data. This is one of the rare cases where a fixed axis is more honest than a data-driven one: the whole promise of the format is that every bar is the same height.
Segments stack from the bottom in column order, exactly as in the ordinary stacked chart. The bottom band is the one a reader can compare across categories with confidence, so put your key series first.
The exported CSV and JSON contain the percentages rather than the original numbers, rounded to two decimals. That is deliberate: exporting the raw values from a chart that deliberately discarded them would invite the wrong comparison.
Questions and answers
Where did my totals go?
They were removed on purpose — that is what this chart type does. If the totals matter too, use the ordinary stacked bar chart, or place a small line chart of the totals directly above this one.
A segment grew in percent but our revenue fell. Is the chart wrong?
No, and this is the classic trap. Percentages describe the split, not the size. A shrinking business can show every "good" segment growing as a share. Always pair this chart with the absolute numbers.
Why does the exported CSV contain percentages?
Because that is what the chart shows. Exporting the original values would let someone compare numbers that the picture never displayed, which is exactly the confusion this format creates.
Can I use it with two segments only?
You can, and it works fine, but with two segments a simple line of the first segment’s share is usually clearer and takes less space.
Does the data leave my browser?
No. Normalisation, drawing and export all happen locally.