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