Why a bar chart has to start at zero, and what to do when the difference really is the story
It is not a stylistic preference and it is not pedantry. A bar says “this much” by its length, so cutting the axis does not understate the honesty of the chart, it changes the quantity the chart is drawing.
Draw it in CHART, which includes zero on the value axis of a bar chart and says why, and will happily draw you a line instead when a line is the honest form. Nothing is uploaded: the SVG is drawn in the page.
What a bar is actually doing
Every chart encodes numbers as something you can see. The choice of what to encode them as is the whole design, because people read some visual properties accurately and others badly. Position along a common scale is read very accurately. Length is read well. Angle is read poorly, which is why pie charts are hard to compare. Area is read worse still, and shade worst of all.
A bar chart encodes quantity as length from a baseline. That is its entire mechanism. The bar for 40 is twice the bar for 20 because forty is twice twenty, and the reader takes the ratio of the lengths without consciously deciding to.
Move the baseline and the lengths stop being proportional to the quantities, but the reader's habit does not change. They still take the ratio. The chart is now saying something the data does not.
The arithmetic of it
Two values: 500 and 520. A four per cent difference. Drawn from zero, the bars are almost the same height, which is correct, because the numbers are almost the same.
Now start the axis at 490. The first bar represents 10 units of visible length and the second 30. The reader sees one bar three times the other and concludes, accurately for what is in front of them, that the second thing is three times the first.
| Axis starts at | Bar A | Bar B | Apparent ratio | Real ratio |
|---|---|---|---|---|
| 0 | 500 | 520 | 1.04× | 1.04× |
| 400 | 100 | 120 | 1.20× | 1.04× |
| 490 | 10 | 30 | 3.00× | 1.04× |
| 499 | 1 | 21 | 21.0× | 1.04× |
The distortion is not bounded. It is a free parameter: the closer the baseline creeps to the smaller value, the larger the apparent difference, and it can be made arbitrarily large without changing a single number in the table. That is why this one is treated differently from most charting advice. Most chart rules are about clarity. This one is about a picture that can be made to say anything.
An axis label does not fix it, and this is the part most people get wrong when they defend a truncated bar chart. The numbers are printed on the axis, the truncation is disclosed, and the reader still takes the wrong impression, because the impression is formed by the lengths before the labels are read and it does not update afterwards. Disclosure does not undo a perceptual effect.
Why a line may be cut when a bar may not
A line chart encodes quantity as position, not length. Nothing on a line chart is a length whose ratio means anything: the reader is following a path and reading its height against the scale. Moving the baseline changes the steepness of the path, which changes the emphasis, but it does not claim a false ratio, because no ratio was being claimed.
So a line chart of a share price from 498 to 522 over a year, with the axis running 495 to 525, is a perfectly honest chart, and a bar chart of the same two endpoints on the same axis is not. Same numbers, different encoding, different rule.
The same applies to a dot plot, which puts a single mark at each value. Dot plots are underused for exactly this reason: they are the right answer whenever you want to compare values that are all far from zero.
What to do when the small difference really is the point
This is the legitimate complaint, and it deserves a real answer rather than a rule. Sometimes four per cent genuinely is the story — a four per cent drop in yield, a four per cent rise in failures — and a bar chart from zero shows two bars that look identical.
Three honest options, in the order they are usually right:
- Plot the difference itself. If the change is the story, make the change the quantity. A bar chart of +20 starts at zero perfectly happily and shows the thing you actually want shown. This is nearly always the best answer and is nearly always overlooked.
- Use a dot plot or a line. Position-based, so the axis can be cut without lying. Put the two dots on a scale from 495 to 525 and the gap is plain.
- Use an index. Set the baseline value to 100 and plot everything relative to it. Now zero means “nothing at all”, 100 means “where we started”, and the four per cent is a bar of 104 against 100 — visible, and not a false ratio, because the quantity being drawn is genuinely the index.
Where the rule does not apply
It is worth being precise about the boundaries, because a rule applied without understanding becomes its own kind of error.
- Quantities with a meaningful non-zero origin. Temperature in Celsius or Fahrenheit is the standard example: zero degrees is not the absence of temperature, it is a point on an arbitrary scale, so a bar from zero is not obviously more meaningful than a bar from anywhere else. Draw temperature as a line.
- Differences and changes. A chart whose quantity is already a change has a natural zero — no change — and bars going up and down from it are exactly right.
- Log scales. A logarithmic axis has no zero to include. Bars on a log scale are a bad idea for a different reason: the length of a bar on a log scale is meaningless, because the encoding is broken before the baseline is chosen.
- Ranges and intervals. A bar drawn from a minimum to a maximum — a floating bar, a candlestick, a Gantt bar — is not encoding a quantity by length from a baseline at all. It is encoding two positions. Different mark, different rule.
The rule in one line
If the length of the mark is the quantity, the axis includes zero. If the position of the mark is the quantity, it does not have to. Everything else follows from that, including the cases where the usual advice is wrong.
Questions people ask about why a bar chart starts at zero