MisleadingCharts
All techniques

Axis crimes

The log scale

Every gridline is another ×10, and the eye reads them as equal steps.

a.k.a. logarithmic axis · orders of magnitude · ratio scale

A log axis spaces equal ratios equally: 1 to 10 occupies the same width as 1,000 to 10,000. For data that genuinely spans orders of magnitude that is the right tool — but the eye still reads distance as amount, so a thousandfold gap arrives on the page looking like a modest lead. Put bars on one and it gets worse: a bar encodes its value as length from zero, and a log axis has no zero, so every bar’s length is set by wherever the axis was started. And what the axis has no zero for it has no room for either: the logarithm of zero is undefined, so a row worth nought is not drawn small, it is not drawn. That one is the quietest failure in the family, because it takes a row out of the table rather than bending the scale — on a line chart the point vanishes and the line closes over the hole, and widening the axis will never bring it back.

How to spot it

  • Read the axis numbers. 1, 10, 100, 1,000 is a log scale; 1, 2, 3 is not.
  • Bars on a log axis — ask where the axis begins, then imagine it beginning a decade lower.
  • Growth that appears to be “slowing” or “going linear”: on a log axis a straight line is a constant percentage, not a constant amount.
  • Two values labelled a hundredfold apart whose marks look a hand’s width apart.
  • Count the marks against the rows. A log axis cannot place a zero or a negative, and what happens to those rows is the tool’s choice rather than the chart’s: matplotlib clips them off the bottom of the frame by default, ggplot2 drops them and prints a warning into a console no reader of the finished picture sees, and a filter added upstream so the axis would render at all says nothing whatsoever. On a line chart the loss is invisible, because the line simply joins what is left.
  • A series that can legitimately be nought — outage minutes, defects, sales of a slow SKU, a month with no incidents — drawn on a log axis at all. The zeros are usually the good news, which is why nobody misses them.

The fix

If the question is how much bigger, use a linear axis from zero. Keep the log scale for ranges that genuinely span orders of magnitude, label it loudly, and give it dots rather than bars — a dot marks a position, which is all a log axis can honestly encode. If the small values deserve attention, give them their own chart at their own scale. Where the series can be nought, decide what becomes of those rows before the axis decides for you: draw them as a rug of marks along the foot of the plot, or use a symmetric-log axis with the start of its linear zone printed in the caption. And print the count of points against the count of rows the way you print a unit — “105 of 140 months plotted” is one line, and it is the line no charting default will write for you.

In the gallery