Command Palette

Search for a command to run...

Hectal
PHASE 17Advanced ~24 min· topic 1 of 6

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.

headline from the datawhole filejs
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.

Choose which findings make the cutdiagram
Rendering diagram…

Try it yourself

  1. 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 prints Summer 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. 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

The same year, to explore and to explain New tab

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

Press Run to see the page.

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 day
Lina's three findings, and a headline writer that can say nothing New tab

Failure 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 days

Break 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";.

terminal
$ Console
── what you'll see ──
all equal : no headline: within 5%, no difference worth a title
winter all zero: Summer days carry Infinity times the rides of winter days
a NaN in the data: Summer days carry 2.5 times the rides of winter days

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.sum and d3.extent skip NaN, null and undefined values. That is why the NaN case in the second example still gives 2.5: a missing value is ignored, not an error. But a.length counts the NaN, so a guard on the count must filter first, as finding does. Mean of an empty array is undefined, and undefined / x is NaN.

  • ▸

    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. 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. 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. 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. 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. 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. 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

01

What is the difference between an exploratory and an explanatory visualization? Give an example of each at Lumen Bikes.

02

Why should the headline state the finding, rather than name the chart?

03

Why does the audience change what you build? Compare the city website visitor with Priya.

04

Why can a headline writer fail without any error, and how do you guard against it?

Practice

01

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.

02

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.