Skip to content
AITroveRead. Build. Understand.
Make this comfortable

Axis scales, baselines and labels: prevent a correct number from telling a false story

Last updated: 5 Oct 20265 min read
tutorial
IntermediateBy AITrove Editorial

Axis choices change visual distance, so the scale must match the comparison and be disclosed wherever it changes interpretation.

Use a meaningful baseline

Bar length is read against its baseline. Starting a bar axis at 0.71 can make two completion rates of 0.74 and 0.77 look several times apart. Use zero for ordinary bar lengths and show exact values when a small difference matters. A line chart may use a narrower range to show variation, but the displayed bounds and units must remain obvious.

Inspect transformations

A logarithmic axis can reveal values across orders of magnitude, but equal screen distances then represent equal ratios rather than equal differences. Zero and negative values need an explicit treatment. Never switch an axis to logarithmic merely to fit an outlier, and never compare a linear-panel slope with a log-panel slope as though they share meaning.

Keep category order honest

Sort categories by a documented metric or a stable domain order. If the order changes at each refresh, motion can look like a performance shift when values are steady. Labels should state percent versus percentage points; moving from 74 to 77 percent is a three-point change, not a three-percent relative change. The chart question decides which comparison is primary.

Test presentation rules

Prepare two rates, 0.74 and 0.77, and verify both bars share zero. Then format them as 74.0% and 77.0%. If a narrow view clips labels, retain an accessible text table. Recheck after filtering because an automatic axis may silently rescale and change the apparent difference.

Implementation

python
def percentage_point_change(previous_rate, current_rate):
    if not all(0 <= rate <= 1 for rate in (previous_rate, current_rate)):
        raise ValueError("rates must be between zero and one")
    return (current_rate - previous_rate) * 100

change_points = percentage_point_change(0.74, 0.77)

Performance and operating cost

Scale formatting is O(M) for M plotted marks. The larger cost is review: test every filter state that changes axis bounds, zero visibility or label collisions. Cache formatted labels only when underlying rate and unit versions match.

Common Mistakes

  • Do not truncate a bar axis without making the baseline explicit.
  • Do not label a percentage-point movement as a relative percent.
  • Do not hide nonpositive observations when using a logarithmic scale.

Read next

ai-data
data-visualization
Storage details