← All articles

Charting data on different scales without skewing the story

Put daily revenue on a chart next to fill rate and you have a problem before you've drawn a single pixel. One series lives around $12 million; the other between 94% and 98%. Plot them on one axis and the fill rate is a flat line pinned to the floor — technically present, completely unreadable. Every dashboard that mixes dollars, counts, and percentages hits this, and most of the standard escapes quietly distort the story. Here are the traps we watch for in our own dashboards, and the honest alternatives.

The dual-axis trap

The reflexive fix is a second y-axis: dollars on the left, percent on the right. Sometimes that's fine. But a dual-axis chart hands you two dials — the min and max of each axis — that let you make the two lines do anything. Stretch one axis and the series "cross" dramatically; compress it and they "track each other" beautifully. Neither pattern is in the data; both are in the axis limits you chose. Readers can't tell the difference, and that's exactly why dual-axis charts are the favorite tool of people trying to sell a correlation that isn't there.

If the shape of the story changes when you change an axis limit, the story was never in the data — it was in the axis.

Our rule: a second axis is acceptable only when the two series are different units of the same physical thing (units and dollars of the same order line), when both axes start at values chosen by rule rather than by eye, and when the chart's point doesn't depend on where the lines cross. If the point is the relationship, use one of the tools below instead.

The zero-baseline rule — and its one exception

Bar charts encode value as length, so a bar chart that doesn't start at zero is simply lying — a bar twice as long must mean twice as much. Line charts encode value as position, and position survives a truncated axis: it's legitimate to plot fill rate from 90% to 100% when the operationally meaningful movement lives in that band. The catch is disclosure. A truncated axis should be visibly labeled and, ideally, consistent across every panel that shows that metric, so a reader who scans from chart to chart isn't re-calibrating on each one. In our executive dashboards, ratio metrics like OTD and fill rate keep a fixed band across every view for exactly that reason.

Indexing: the honest way to compare growth

When the question is "which is growing faster?", absolute scales are the wrong instrument entirely. Index every series to 100 at a common starting point and plot the indices. Revenue at $12M/day and orders at 50,000/day both become 100 on day one, and a reader sees relative motion directly — a series at 108 grew 8%, full stop. Indexing removes the units problem instead of hiding it, which is why it's the standard for comparing prices, volumes, and anything else that doesn't share a denominator. The one thing to keep honest is the base period: index from a trough and everything after looks like triumph. Pick a neutral base — a full month, a year-ago period — and say what it is on the chart.

Log scales: for data that spans magnitudes

Some data doesn't have a scale — it has several. Our item file runs from C-class parts that ship a few units a month to A-class items moving thousands a day. On a linear axis the A-items are all you see; on a log axis every decade of volume gets equal room, and the C-class tail becomes visible structure instead of floor noise. Log scales are honest for exactly this job — but they must be labeled loudly, because casual readers read distance as difference: on a log axis, equal distances mean equal ratios, and a series that looks "slightly higher" may be ten times higher.

Small multiples: when one chart is the wrong number of charts

The strongest answer to mixed scales is often to stop forcing series into one panel. A grid of small charts — same x-axis, one metric each, each with the axis that suits it — lets revenue be read as revenue and fill rate as fill rate, while the shared time axis still lets the eye line up events across panels. That's how our DC throughput views handle orders, labor hours, and backorder counts: three units, three panels, one timeline. The comparison the reader actually wants — did these move together? — survives; the fake precision of overlaid lines doesn't.

Normalize to a rate when a denominator exists

Finally, a lot of mixed-scale problems are really denominator problems in disguise. Freight cost and revenue don't belong on one chart — but freight as a percent of revenue is a single honest series, and it's the number a reader would compute anyway. Cost per order, revenue per customer, returns per thousand shipments: when a natural denominator exists, dividing by it usually beats any amount of axis engineering. Our own methodology leans on this everywhere — the cost-to-serve views are almost entirely rates for exactly this reason.

The checklist

Before shipping a mixed-scale chart, we ask: Would the story survive different axis limits? Do bars start at zero, and are truncated line axes labeled and consistent? Is a growth comparison indexed to a neutral base? Does magnitude-spanning data get a labeled log scale? Would small multiples or a rate say it more honestly than an overlay? Charts don't lie on their own — scales do. Control the scales deliberately and the chart tells the truth by construction.