Why should a bar chart start at zero?
Take apart the most common trap, bars with a cut axis: why they mislead, how they happen without anyone deciding, and how to fix them in Excel and in Google Sheets.
Free course. Your Maestro, an AI, .
The course's first question was this one: in a chart, Providencia's bar looked about five times taller than Chapultepec's, but the numbers said 10.27 against 8.02 million. You've already read it with the four moves and seen where the trick was: the axis started at 7.5 million. This page explains why that misleads so much, how it happens without anyone wanting it, and how to fix it in two minutes.
The length is the amount
A bar says "how much" with its length, from the base to the tip. The eye doesn't read the number on the axis: it compares lengths. If the axis starts at zero, a bar twice as long is twice the amount, and what you see is what's there. If the axis starts at 7.5 million, the bottom of every bar disappears and you only compare the pieces on top. The eye still believes it's comparing amounts, and it's wrong.
Claus Wilke, in his book Fundamentals of Data Visualization, calls it the principle of proportional ink: the size of the shaded areas has to be proportional to the data they represent. From there he draws the rule: bars on a linear scale should always start at zero.
Watch the trap step by step.
Step 1 of 4
The first impression
Look at the chart for five seconds without reading any numbers. What does it tell you? Almost everyone answers something like "Providencia sells way more than Chapultepec". Synthetic data, CC0.
Often it isn't bad faith
Often nobody decided to cut the axis. According to Microsoft's help, when you create a chart, Excel sets the minimum and maximum values of the vertical axis on its own. If you don't check it, the program chose where the axis starts, not you. Nobody asked for it, nobody notices, and if that minimum isn't zero, the chart shows up at the meeting exaggerating.
So when you make a bar chart, check where the axis starts before you send it. It's the check that prevents the most mistakes with the least effort. The steps depend on your program; pick yours.
In Excel for Microsoft 365, 2024 or 2021 on Windows, according to Microsoft's help:
- Click the chart.
- On the Format tab, in the Current Selection group, open the Chart Elements box and choose Vertical (Value) Axis.
- In the same group, click Format Selection.
- In the Format Axis pane, go to Axis Options and type
0in the Minimum box.
The Reset button next to the box brings it back to its original value, the one Excel had chosen on its own. For bars, leave it at zero.
In Google Sheets, on your computer, according to Google's help:
- Double-click the chart.
- At the right, click Customize.
- Click Vertical axis.
- There you can set the axis's minimum value: set it to
0.
If you can't find it, ask your Maestro and describe what you see in the panel.
Try it
This is the same chart, with its cut axis. Fix it so the lengths tell the truth.
Make one change: in y, replace "scale": {"domain": [7.5, 10.5]} with "scale": {"zero": true}. That tells the axis to start at zero. You're done when the three bars rise from zero and look almost the same size, with Providencia a little taller. Compare with the first impression fr
Your turn
Make one change: in y, replace "scale": {"domain": [7.5, 10.5]} with "scale": {"zero": true}. That tells the axis to start at zero.
You're done when the three bars rise from zero and look almost the same size, with Providencia a little taller. Compare with the first impression from before: what story does it tell now?
Edit the JSON; the preview updates when you pause.
How this maps to Altair
Altair builds this same JSON: chart.to_json() prints it. "mark": "point" is alt.Chart(df).mark_point(). Each encoding channel is an argument to .encode(), such as x=alt.X("field:Q", scale=alt.Scale(type="log")) or color="field:N". Each transform entry is a call such as .transform_filter("datum.year == 2007").
Does your program cut the axis on its own and you can't find where to change it? Tell your Maestro which program you use.
With zero in view, the story changes from "Providencia crushes it" to "the three are close". That second story is the true one, and it's the one the manager needs to decide.
What if the small difference is what matters?
Sometimes a small difference does matter: the temperature of a fridge that has to stay between 2 and 4 degrees Celsius, or a service score that went from 4.5 to 4.7. With bars from zero, those differences don't show. The way out is not to cut the bars' axis, it's to change the chart: dots or a line, which show the value by its position and can start close to the data. Another option is to chart the difference itself ("+0.2 points") instead of the two values.
In short: bars start at zero, always. Lines and dots may not, as long as the axis says so clearly.
Have a bar chart in a report where the axis doesn't start at zero? Tell your Maestro what it shows and decide together how to fix it.