mirror of
https://github.com/olehomelchenko/chart-sins.git
synced 2026-08-08 02:22:43 +00:00
Add content backlog mined from the canon
Ranks the next six sins by working backwards from the references we already vouch for: six of fifteen canon entries were uncited, and each idle one points at a sin worth writing. Also records the candidates our build-time Vega-Lite pipeline can't prove honestly yet, so we stop rediscovering them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ULE5RRxdQE1ebwefEd2eCM
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
# Content backlog — what to write next
|
||||
|
||||
Working document. The rule that generated this list: **every sin must be
|
||||
condemned by something already in the canon** (`src/lib/references.ts`). We
|
||||
don't invent authority, so the backlog is mined *from* the sources rather than
|
||||
brainstormed and back-filled with citations.
|
||||
|
||||
## Canon coverage
|
||||
|
||||
Which references are already doing work, after the first three sins:
|
||||
|
||||
| Reference | Cited by |
|
||||
| --- | --- |
|
||||
| `callingbullshit` | truncated-y-axis |
|
||||
| `clevelandmcgill` | truncated-y-axis, pie-chart-overload |
|
||||
| `tufte` | truncated-y-axis |
|
||||
| `howchartslie` | truncated-y-axis, dual-axis-deception |
|
||||
| `datatoviz` | dual-axis-deception, pie-chart-overload |
|
||||
| `spurious` | dual-axis-deception |
|
||||
| `swd` | dual-axis-deception |
|
||||
| `fewpies` | pie-chart-overload |
|
||||
| `junkcharts` | pie-chart-overload |
|
||||
| **`munzner`** | — |
|
||||
| **`wilke`** | — |
|
||||
| **`healy`** | — |
|
||||
| **`huff`** | — |
|
||||
| **`schwabish`** | — |
|
||||
| **`ftvisvocab`** | — |
|
||||
|
||||
Six idle references. Each is an authority we've already endorsed on the canon
|
||||
page, so a sin that leans on one is cheap to justify and strengthens the page it
|
||||
sits on. The backlog is ordered to bring them all in.
|
||||
|
||||
## Ranked backlog
|
||||
|
||||
### 1. The Cherry-Picked Window — *Deceptive Framing*, severity 5
|
||||
|
||||
**Poke:** "You started the clock exactly where the story got good."
|
||||
|
||||
The trend runs one way over five years and the other way over five months, so
|
||||
the chart shows the five months. Nothing about the chart is technically false —
|
||||
the axis starts at zero, the labels are honest — which is what makes it the
|
||||
nastiest sin on this list and a good counterweight to the three scale/type sins
|
||||
we already have.
|
||||
|
||||
**Charts:** one series, two views. Bad = the flattering slice. Fixed = the full
|
||||
record with the slice shaded in place. Literally the same dataset filtered, so
|
||||
the "same numbers, both charts" rule holds by construction — the strongest proof
|
||||
we can build.
|
||||
|
||||
**Citations:** `huff` (the original con), `callingbullshit`, `howchartslie`,
|
||||
`junkcharts`.
|
||||
|
||||
### 2. Bars That Hide the Distribution — *Hiding the Data*, severity 4
|
||||
|
||||
**Poke:** "Four bars, four averages, and no idea whether the difference is real."
|
||||
|
||||
The bar-of-means: every group collapsed to one number, so wildly different
|
||||
distributions draw identical bars. Wilke devotes a section to exactly this and
|
||||
Healy makes the perceptual case; it's the natural home for three of our six idle
|
||||
references at once.
|
||||
|
||||
**Charts:** bad = grouped bar of means. Fixed = strip/box plot over the same
|
||||
observations, means still marked.
|
||||
|
||||
**Citations:** `wilke`, `healy`, `schwabish`, `datatoviz`.
|
||||
|
||||
### 3. The Inflated Bubble — *Perceptual Traps*, severity 4
|
||||
|
||||
**Poke:** "You doubled the number and quadrupled the ink."
|
||||
|
||||
Scaling a circle's *radius* by the value instead of its *area* squares the
|
||||
apparent difference. This is Tufte's Lie Factor with an actual number attached,
|
||||
and it's the cleanest possible excuse to bring Munzner's channel ranking onto a
|
||||
page — the same ranking that already underwrites the pie and truncated-axis
|
||||
sins.
|
||||
|
||||
**Charts:** bad = radius ∝ value (a `calculate` transform squaring the size
|
||||
encoding). Fixed = area ∝ value, or better, the same values as a dot plot where
|
||||
position does the work.
|
||||
|
||||
**Citations:** `munzner`, `clevelandmcgill`, `tufte`, `howchartslie`.
|
||||
|
||||
### 4. Alphabetical Is Not a Ranking — *Sloppy Craft*, severity 2
|
||||
|
||||
**Poke:** "Your categories are sorted by name. Nobody wants to know which
|
||||
region starts with A."
|
||||
|
||||
Venial, universal, and the single most useful page to fire at a colleague —
|
||||
which is the whole product thesis. Low severity is a feature: the gallery needs
|
||||
a range, and this one brings in the FT Visual Vocabulary.
|
||||
|
||||
**Charts:** bad = categorical bars in alphabetical order. Fixed = same bars
|
||||
sorted by value.
|
||||
|
||||
**Citations:** `schwabish`, `ftvisvocab`, `swd`, `fewpies`.
|
||||
|
||||
### 5. The Reversed Axis — *Misleading Scales*, severity 5
|
||||
|
||||
**Poke:** "Down means up. You flipped the axis and the trend flipped with it."
|
||||
|
||||
The famous one. High drama, trivial to author (`scale: {reverse: true}`), and it
|
||||
slots into an existing category. Ranked below the others only because the canon
|
||||
support overlaps almost entirely with sins we've already published.
|
||||
|
||||
**Citations:** `callingbullshit`, `howchartslie`, `junkcharts`.
|
||||
|
||||
### 6. Squashed and Stretched — *Misleading Scales*, severity 3
|
||||
|
||||
**Poke:** "Same data, twice as tall. Aspect ratio is not a styling choice."
|
||||
|
||||
Cleveland's banking-to-45° argument: the identical series reads as a crisis or a
|
||||
plateau depending on the box you draw it in. Cheap to author — one dataset, two
|
||||
`width`/`height` pairs — and a rare sin where the bad chart contains no false
|
||||
statement at all.
|
||||
|
||||
**Citations:** `clevelandmcgill`, `howchartslie`, `wilke`.
|
||||
|
||||
## Not yet buildable
|
||||
|
||||
Real sins, but our pipeline can't prove them honestly today. Recorded so we stop
|
||||
rediscovering them:
|
||||
|
||||
- **3D bars / gratuitous perspective** and **chartjunk** (Tufte, Few) — Vega-Lite
|
||||
won't render the sin, and a screenshot violates the same-pipeline rule that
|
||||
makes the before/after credible.
|
||||
- **Counts on a choropleth instead of rates** (Cairo's set-piece) — needs
|
||||
TopoJSON geometry and a build-time data dependency we don't have yet. Strong
|
||||
candidate the moment we take that on.
|
||||
- **Rainbow color scales for continuous data** (Wilke, Munzner) — buildable, but
|
||||
the fixed chart needs a sequential ramp validated on `--chart-canvas` in both
|
||||
themes. Do the palette work first (`dataviz` skill + its validator), then
|
||||
write it.
|
||||
|
||||
## Conventions reminder
|
||||
|
||||
Anything picked up from this list still follows `CLAUDE.md`: the poke names the
|
||||
general sin and never our sample's numbers, both charts share one dataset, and
|
||||
the fixed chart obeys every rule the site preaches.
|
||||
Reference in New Issue
Block a user