09 · Communicating Findings¶
An analysis nobody understands or acts on has zero impact, no matter how correct the statistics behind it are. This module covers visual storytelling — structuring a finding so a non-technical reader gets it in seconds — and the misleading-chart tricks to actively avoid, some of which you've already seen hinted at in earlier modules.
The revenue example¶
import pandas as pd
import matplotlib.pyplot as plt
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
revenue = [102000, 104500, 103800, 106200, 105900, 108100]
df = pd.DataFrame({"month": months, "revenue": revenue})
print(df)
pct_change = (revenue[-1] - revenue[0]) / revenue[0] * 100
print(round(pct_change, 2))
Revenue grew a real but modest 5.98% over six months. Here's the same data plotted two ways:
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].plot(months, revenue, marker="o")
axes[0].set_ylim(0, 120000)
axes[0].set_title("Honest: y-axis from 0")
axes[1].plot(months, revenue, marker="o")
axes[1].set_ylim(100000, 109000)
axes[1].set_title("Misleading: truncated y-axis")
fig.savefig("revenue_comparison.png", dpi=150)
The left chart (y-axis 0–120,000) shows a gentle, honest upward slope — it visually matches the real 5.98% growth. The right chart (y-axis 100,000–109,000) shows the identical six numbers as a dramatic, near-vertical climb, because zooming the axis into a tiny window exaggerates every wiggle. Both charts are technically "accurate" — same data, same axis labels — but only the left one gives an honest visual impression of the magnitude of change. This is the exact trap flagged as a warning in Module 05's bar chart section, and it applies to line charts too.
Rule of thumb
For charts meant to convey how big a change or difference is, start the axis at zero. Zooming in is only defensible when the chart's whole purpose is to show fine-grained wiggle in an already-established trend (e.g. a stock trader's minute-by-minute chart) — and even then, label the axis range prominently so the reader isn't misled.
Visual storytelling: structure over decoration¶
A good data science write-up follows a predictable shape, in this order:
- The headline finding, first. "Revenue grew 6% in H1, driven almost entirely by the West region" — not "here are twelve charts, you figure it out."
- One chart per finding, not one mega-dashboard. If a chart needs a paragraph of caption to explain what it's showing, it's usually two charts trying to be one.
- Comparison, not just description. "$108,100 in June" means little alone; "$108,100 in June, up from $102,000 in January, in line with our Q2 target" is a sentence someone can act on.
- Uncertainty stated plainly, using the vocabulary from Module 06 — "revenue is up 6%, and this is a real trend, not month-to-month noise (p < 0.01)" is a stronger and more honest claim than a bare percentage.
- A recommendation or "so what", echoing Module 01's "so what?" test — tie every finding back to a decision.
A checklist of chart tricks to avoid¶
| Trick | Why it misleads | Fix |
|---|---|---|
| Truncated y-axis on a bar/column chart | Exaggerates small differences | Start bar-chart axes at 0 |
| Dual y-axes with different scales | Makes unrelated lines look correlated | Use two separate charts, or one shared axis |
| Cherry-picked date range | Hides that a "trend" is really noise or a one-off event | Show a longer baseline period alongside |
| Pie chart with many thin slices | Humans compare angles poorly | Use a sorted bar chart instead |
| Reporting a % change with no baseline number | "grew by 200%!" from 1 to 3 units sounds huge | Always show the absolute numbers alongside the % |
| Correlation implied as causation in a caption | Overclaims what the data shows | State explicitly: "associated with," not "caused by" (Module 07) |
| Showing only the statistically significant result | Classic p-hacking (Module 06) presented visually | Show all comparisons tested, not just the "winner" |
Cheat sheet¶
| Task | Guidance |
|---|---|
| Bar/column chart axis | Always start at 0 |
| Line chart showing magnitude of change | Start at 0 unless zooming is the explicit point, and label clearly |
| Leading with the finding | State it in one sentence before showing any chart |
| Reporting a %, always also report | The absolute numbers behind it |
| Claiming a relationship | Say "associated with," never "causes," unless from a controlled experiment |
| One chart, one point | Split a chart that needs a paragraph to explain |
How It Actually Works¶
The perceptual science behind why truncated axes lie. Human graphical perception research (notably Cleveland & McGill's classic ranking of perceptual tasks) shows people judge position along a common scale and length far more accurately than they judge angle or area — which is exactly why bar/line charts are effective in the first place: they encode values as lengths and positions. But that same accuracy is precisely what makes truncation dangerous — because viewers are good at reading length differences, artificially inflating the length difference between two bars (by cropping the baseline) directly and reliably inflates the perceived magnitude of the underlying data, in a way viewers have no way to detect from the chart alone without checking the axis numbers explicitly.
Why pie charts are the worst-ranked common chart type perceptually. Following the same perceptual research, angle and area judgments are measurably less accurate than length/position judgments for the same underlying numeric differences — people reliably misjudge close pie-slice proportions (e.g. telling 31% from 35% apart) far more often than they misjudge equivalent bar heights, which is the empirical basis (not just convention) for "use a sorted bar chart instead of a pie chart."
Why "the headline first" isn't just a writing preference. This mirrors how working memory actually processes sequential information: readers form an interpretation of the first chart or sentence they see and then use it as an anchor for everything after (a well-documented cognitive bias called anchoring). Leading with twelve unlabeled charts forces every reader to build their own anchor from scratch — and different readers will anchor on different charts, producing different takeaways from identical data. Front loading the specific numeric claim ("revenue grew 6%") gives every reader the same anchor before they see any chart, which is why it reliably produces more consistent understanding across an audience than any downstream formatting choice can.
Exercise¶
Take any bar chart you've made in this track so far (Module 05's
spend_by_region chart is a good candidate) and write the three-sentence
summary a non-technical stakeholder should read before seeing the chart:
(1) the headline finding, (2) the comparison that gives it context, (3) one
honest caveat about what the data does or doesn't prove.