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 2–3 series across the same categories |
|---|---|
| Series limit | Three is comfortable, four is crowded, five is unreadable |
| Category limit | Categories × series bars in total — twelve groups of three is already 36 bars |
| Comparison priority | Within a group first, across groups second — that is what grouping does to perception |
| Zero baseline | Mandatory |
| Output | PNG at 2× scale, plus CSV, JSON and Markdown |
When it misleads you
- Grouping decides what gets compared. Bars inside one group are compared easily; the same series across different groups is much harder to track. If your real question is "how did each series change over time", a line chart answers it better.
- The number of bars multiplies fast. Ten categories with three series is thirty bars, and at that density the individual bars become too thin for their heights to be judged.
- Series order inside every group must stay constant, and it does here — but it means the reader has to learn the colour code before the chart makes sense. Keep the legend short.
- Grouped bars invite comparison between series that may not be comparable at all: revenue in euros next to headcount in people share one axis and neither is served well.
How it is calculated
The label column defines the groups. Every remaining numeric column becomes one bar inside each group, in the order the columns appear in your table, with a fixed colour per series carried across all groups.
The axis starts at zero, as with any bar chart, and cannot be moved. Grouping magnifies the effect of a truncated axis rather than reducing it, because the reader is comparing two nearby bars directly.
Bar width adapts to the number of groups and series so that the clusters stay visually separated. When the data would produce bars thinner than a couple of pixels, the honest answer is fewer categories, not a wider canvas.
Missing values leave a gap in the cluster rather than drawing a zero-height bar. A missing measurement should not look like a measured zero, especially in a plan-versus-actual chart where a zero is meaningful news.
Questions and answers
Grouped or stacked — which do I need?
Grouped when the values are alternatives to be compared (plan versus actual). Stacked when they are parts of one whole (revenue split by channel). Asking whether the sum of the values means anything usually settles it.
Can I compare more than three series?
Technically yes, but the chart stops working. Four series across eight categories is 32 bars and no reader can hold that. Split into several charts or switch to a line chart.
Why is my time series hard to follow?
Because grouping optimises for comparison inside a category, not for tracking a series across categories. For time, use the multi-series line chart.
How do I control which column comes first?
Reorder the columns in your pasted table. Series are drawn strictly left to right in column order.
Is my data sent anywhere?
No. Everything runs in your browser and the page works with the network disconnected.