Blog
Charts from data

CSV to 100% stacked chart online

This is the chart for when the mix matters and the totals get in the way. Each bar is rescaled to exactly 100%, so a quarter that earned twice as much as another still occupies the same height — and the only thing you can see is how the split changed.

Your data never leaves this device

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

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

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.

The opposite tool

Need it the other way round? Stacked bar chart The total and its parts in one column

Related tools

All tools