Topic 17.1
Exploring vs Explaining
In one line
A dashboard is for exploring: many questions, asked by someone who wants to ask them. A story is for explaining: one point, told to someone who did not ask. The finding comes first, and the audience decides how much you must say.
Think of it like this
A museum has two ways to meet a painting. The storeroom lets a researcher pull out any drawer and look at anything. The gallery hangs three paintings on one wall, with a card beside each that says what to notice. The storeroom is for exploring. The gallery is for explaining. Both show the same museum, to different people.
Words you'll meet
New words in this topic, in plain English. Come back here whenever one feels fuzzy.
- exploratory
- Built for the reader to ask their own questions: filters, hovers, many charts. A dashboard is exploratory.
- explanatory
- Built to make one point to a reader who did not ask: a finding, a chart and words that guide the eye.
- finding
- The one sentence you want the reader to leave with, with a number in it.
- headline-first
- Stating the finding as the title, before the evidence, so a reader who stops early still has the point.
- audience
- Who will read it, what they already know, and what they will do next.
- narrative
- The order in which a story reveals things so each step prepares the next.
Step by step
01Draw the same data twice
The first example draws the Lumen year two ways. On the left, four small charts (rides, e-bike rides, temperature, rain) with no title that says anything. On the right, one chart with the summer months picked out and a headline above it.
Neither is wrong. The left one answers four questions if you ask them. The right one answers one question nobody asked, which is exactly what a story is for.
02Compute the finding, do not type it
The headline is written by code from the data: the summer average divided by the winter average, to one decimal. That way it cannot drift from the chart. If the data changes, the sentence changes with it.
The next example prints Lina's three findings, each with the two numbers behind it: 3,634 against 1,480 rides a day; 439 rides on 14 August against 3,612 on other August days; 28.3 % e-bike rides in January against 37.7 % in December.
const ratio = perDay("summer") / perDay("winter");
const finding = "A summer day carries " + ratio.toFixed(1) + " times the rides of a winter day";03Teach the writer to stay quiet
The function finding(a, b, ...) returns a sentence only when there is a real comparison. It says nothing for an empty side, for fewer than 7 days, for two groups within 5 % of each other, and for a base of 0 (which would make the ratio infinite).
This is the story version of an empty state (Topic 16.4): the honest output for no finding is no headline.
04Choose which findings make the cut
Three findings fit a one-minute story. Each needs one chart state. Anything that does not serve them (the weekday pattern, the rain, the temperature) stays on the dashboard, one click away for the curious.
Try it yourself
- 1
Change the evidence, watch the headline change
In the second example, add this line after "real data":
console.log("first week only:", finding(summer, winter.slice(0, 7), "Summer", "winter"));. It printsSummer days carry 2.7 times the rides of winter days. Seven winter days are enough for the guard, but they are the first week of January, and the ratio moves from 2.5 to 2.7. A finding depends on which days you compare. - 2
Make the headline say how sure you are
In the first example, change the finding to
"A summer day carries about " + ratio.toFixed(1) + " times the rides of a winter day (June to August against December to February)". The headline now names its comparison. It is longer, and a reader can check it.
Code & diagrams
Winter here means December, January and February (the three coldest months in the data); summer is June to August. The headline is built from the data, so it cannot disagree with the chart.
Preview
Console
Nothing logged yet.Expected console output
Explore: 4 charts, 4 questions you can ask, 0 findings stated
Summer averages 3634 rides a day, winter 1480
Explain: 1 chart, 1 finding in its title: A summer day carries 2.5 times the rides of a winter dayFailure and edge cases that print no error: without the guards, an empty side, a base of 0 or equal groups would still produce a confident sentence.
Console
(nothing was printed)Expected console output
Seasons: summer 3634 vs winter 1480 rides a day
Outage: 14 Aug had 439 rides, other August days averaged 3612
E-bikes: 28.3% of January rides, 37.7% of December rides
--- the same function on awkward input ---
real data : Summer days carry 2.5 times the rides of winter days
empty winter : no headline: one side has no data
three days : no headline: fewer than 7 days is too few to call a pattern
all equal : no headline: within 5%, no difference worth a title
winter all zero: no headline: the base is 0, so a ratio would be infinite
a NaN in the data: Summer days carry 2.5 times the rides of winter daysBreak it on purpose
Errors are the best teachers. Make each change, read the error, guess what went wrong, then reveal the answer.
Break #1
Delete the guard for a base of zero
In the second example, delete the line if (mb === 0) return "no headline: the base is 0, so a ratio would be infinite";.
Myth vs fact
Myth
A story is a dashboard with a nicer theme.
Fact
A dashboard offers questions; a story answers one. The difference is the finding stated first, one chart state per claim, and the cuts you make, not the colours.
Myth
If the data is interesting, the chart will tell the story by itself.
Fact
A chart shows shapes. The reader still has to know which shape matters. The four small charts in the first example show the same summer peak and say nothing about it.
Myth
Every dataset has a finding.
Fact
Two groups within a few percent of each other have no finding, and a good tool says so. A headline written for a non-difference is a false story.
Pro corner
Extra depth for experienced readers. New to this? Skip it for now and come back later.
- ▸
Write the headline before the chart. If you cannot state the finding in one sentence with a number, the story is not ready, and no animation will rescue it. The code in this topic makes the sentence from the data, so the chart and the claim come from one source.
- ▸
d3.mean,d3.sumandd3.extentskipNaN,nullandundefinedvalues. That is why the NaN case in the second example still gives 2.5: a missing value is ignored, not an error. Buta.lengthcounts the NaN, so a guard on the count must filter first, asfindingdoes. Mean of an empty array isundefined, andundefined / xisNaN. - ▸
A comparison of two seasons is only as fair as its windows. Winter here is December, January and February, which includes the quietest days of 2025 (the outage day is not in it). Say the windows in the caption or the chart's note, and keep the code that picks the days next to the sentence that reports them.
Remember this
- 1
The problem this solves: Lina needs a page for the city's website. A visitor there did not ask a question and will not click a dropdown. If she puts the dashboard on the page, the visitor sees four charts, no opinion, and leaves. The team's finding, that summer days carry 2.5 times the rides of winter days, is in the data, but nothing on the dashboard says it.
- 2
Exploring and explaining are different jobs. An exploratory chart is a tool: it offers filters, a hover, many measures, and it trusts the reader to find something. An explanatory chart is a message: it has one finding, one chart (or one chart that changes), and it tells the reader what to see. Priya's dashboard is exploratory, and the first example shows both side by side from the same
daily.csv. - 3
Put the finding first. A story page opens with the claim as the headline, in plain words with a number: "A summer day carries 2.5 times the rides of a winter day." The chart then proves it. A title like "Rides per day, 2025" only names the chart. This is the headline-first habit of newspapers: a reader who stops after one line should still leave with the point.
- 4
Know who is reading. Before drawing, write down the audience: who they are, what they already know, what they will do after. The city website's visitor knows "rides" but not "7-day average", has one minute and a phone, and will do nothing except perhaps share the page. That decides the words, the length and how many findings you can afford. The dashboard's reader, Priya, knows the stations and wants detail.
- 5
One finding per chart, a few findings per story. A story is not a dashboard cut into steps. Each step carries one claim and the chart state that proves it. Lina's page has three findings (seasons, the outage, e-bikes), so it has three or four steps. Every extra finding costs the reader attention, and the ones that do not serve the main point get cut.
- 6
A finding must be earned and can fail. Some data holds no story: two groups within 5% of each other, an empty file, three days of data. A tool that always writes a headline will sometimes write a false one. The second example computes Lina's three findings and then runs a headline writer on awkward input. It declines to write a headline when there is nothing to say, and it refuses to divide by zero.
Explain it without notes
What is the difference between an exploratory and an explanatory visualization? Give an example of each at Lumen Bikes.
Why should the headline state the finding, rather than name the chart?
Why does the audience change what you build? Compare the city website visitor with Priya.
Why can a headline writer fail without any error, and how do you guard against it?
Practice
Write ebikeFinding(rows) that returns "E-bikes grew from X% of rides in January to Y% in December" with one decimal, or null when either month has no rides. Test it on the real daily rows and on an array with no January days.
Lina's page must also say something about the busiest day. Write the headline for it from the data and check it against the chart's tallest point.
Trade-offs
- ↔
A story that states one finding clearly leaves out many true things. The price of being understood is cutting; keep the dashboard link for readers who want the rest.
- ↔
Computing the headline from data keeps it honest but makes the wording rigid. Writing it by hand reads better, so check a hand-written number against the data in a test (Topic 16.7).
Done when you can
I can say when to build a dashboard and when to build a story.
I can write a headline that states a finding with a number.
I can name my audience and say what that changes.
I can make a headline writer decline to write a false sentence.
I can say which findings to cut and where they go instead.