Bar Chart Maker
Compare categories side by side. Grouped bars, an honest zero baseline, PNG export.
About this tool
Bar charts compare separate things: regions, products, teams, months treated as buckets rather than a continuous line. The categories have no natural order, which is the clue that a bar chart rather than a line chart is the right shape — you can reorder the bars without changing what the chart means.
Everything here is drawn from a zero baseline, and that is not a limitation to work around. Readers judge bars by length, so a truncated axis exaggerates every difference: two values four percent apart can be drawn to look like double. It is the most common way a chart misleads without anyone intending it. If your numbers are too close to distinguish from zero, that closeness is itself the finding.
Bars are grouped rather than stacked, so any series can be compared against any other. Category labels along the bottom are thinned automatically when there are too many to fit, and the value axis picks round numbers with headroom above the tallest bar. Paste straight from Excel, Sheets or a CSV — tabs, commas and aligned columns all parse.
Frequently asked questions
How do I get grouped bars?
Add more value columns. One label column plus two value columns gives two bars per category, side by side and colour-coded, with a legend naming each from the header row. Categories keep the order you paste them in, so sort your rows first if you want the chart sorted.
Why does the axis always start at zero?
Because bar length is what the reader compares, and a bar cut off at the bottom lies about the ratio between values. Starting a chart at 90 can make 95 look twice the size of 92. That distortion is the single most common way bar charts mislead, so the baseline here is always zero. If your values differ by too little to see, a line chart or a table is the honest alternative.
Are the bars stacked or grouped?
Grouped. Each category gets its bars side by side rather than piled on top of each other. Grouped bars let you compare any series against any other; stacked bars only make the bottom segment and the total easy to read, and everything in the middle becomes hard to judge.
My header row turned into a bar. Why?
Because every cell in it was a number. A header of "Region, 2025, 2026" is indistinguishable from a data row like "Jan, 100, 200" — both are text followed by numbers — so a row of bare years gets treated as data rather than silently dropped. Losing a real row of data would be the worse mistake. Name those columns "FY2025" or "2025 sales" and the row is recognised as a header.
What about negative values?
They work. The axis extends below zero when it needs to, and negative bars are drawn downward from the baseline, which is what you want for profit and loss, temperature change or net growth.
Where does the chart get processed?
Entirely in this page. Your rows are parsed and drawn locally, no network request is made while you work, and Download PNG renders at 2x through the Canvas API. Revenue figures and headcounts never reach a server.