Skip to course content
Free R data course

R Foundations for Data Analysis

Unit 07.04: The axis is where charts mislead

The most effective misleading chart contains no false numbers at all.

The axis is where charts mislead

A bar chart encodes value as length, and length is read from zero. Starting the axis somewhere else keeps every number correct while making the differences between them look like whatever you choose.

This is not a rare abuse; it is the default behaviour of several tools, which fit the axis to the data. A 6% difference can be drawn as a fourfold one without a single incorrect value on the page.

Line charts are the exception. They encode change as slope rather than length, so a non-zero baseline is often the honest choice — provided the axis is clearly labelled. The other common distortions follow the same pattern: dual axes invite a comparison the data does not support, and pie charts ask readers to compare angles, which they do badly.

This block draws the same three bars against two different axes.

suppressPackageStartupMessages(library(ggplot2))

visits <- data.frame(ward = c("North", "South", "East"),
                     visits = c(412, 401, 388))

truncated <- ggplot(visits, aes(ward, visits)) + geom_col() +
  coord_cartesian(ylim = c(380, 420))
honest <- ggplot(visits, aes(ward, visits)) + geom_col() +
  scale_y_continuous(limits = c(0, 450))

range_true <- max(visits$visits) - min(visits$visits)
cat("Real difference, largest to smallest:", range_true, "visits\n")
cat("As a share of the largest bar        :",
    round(range_true / max(visits$visits) * 100, 1), "%\n\n")

cat("Bar height ratio, axis from 380:",
    round((412 - 380) / (388 - 380), 1), "to 1\n")
cat("Bar height ratio, axis from 0  :", round(412 / 388, 2), "to 1\n\n")

cat("A 6% difference is drawn as a 4-fold one. Nothing in the chart is false;\n")
cat("the axis is simply not where a reader assumes it is.\n")
cat("Bar charts start at zero. Line charts may not, if the axis is labelled.\n")

The real difference between the largest and smallest ward is 24 visits, which is 5.8% of the largest. With the axis starting at 380, the bar heights stand in a ratio of 4 to 1. With the axis starting at zero, 1.06 to 1. Both charts plot the same three numbers correctly, and they support entirely different conclusions.

The mistake this prevents

The mistake is letting the tool choose the axis. It fits to the data, which systematically exaggerates small differences, and nothing about the output looks wrong.

Takeaway

Start bar charts at zero, always. Label any non-zero baseline explicitly on a line chart, avoid dual axes, and use a bar chart instead of a pie chart whenever there are more than about three categories.