mirror of
https://github.com/olehomelchenko/chart-sins.git
synced 2026-08-08 02:22:43 +00:00
Add real-world specimens and cross-links between sins
Two new levers on a sin page. `wild[]` renders credited, linked specimens between the explanation and the citations — first the argument, then proof people actually publish this, then the sources. `related[]` cross-links neighbouring sins and is resolved at build, so a typo fails the build instead of shipping a dead link. Both arrive with the first specimen: a Hungarian primary graphic whose three slices read 38/22/19 — 79% — drawn as a full circle, so every share is inflated by about 1.27x. Measured off the image, the 38% slice occupies 173.6 degrees, or 48.3% of the pie. Our published pie sin is about too many slices, so it didn't cover this; "Pie Slices That Don't Sum to the Whole" is a new severity-5 page whose before/after is two pies differing only in whether the remainder is present. That sin is an omission, so `compareNote` replaces the standard "same numbers, both charts" line. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ULE5RRxdQE1ebwefEd2eCM
This commit is contained in:
+47
-12
@@ -17,7 +17,7 @@ runs 2–5 on purpose.
|
||||
|
||||
## Sources in play
|
||||
|
||||
`src/lib/references.ts` currently holds 24 entries, 20 of them cited by the five
|
||||
`src/lib/references.ts` currently holds 24 entries, 21 of them cited by the 6
|
||||
published sins. This table is a **convenience, not a scoreboard** — it's here so
|
||||
you can spot a source that fits a sin you're drafting, not so we can drive the
|
||||
right-hand column to zero blanks. An uncited reference is not a debt.
|
||||
@@ -29,26 +29,26 @@ seven sources, give it seven and add whatever's missing to the file.
|
||||
| --- | --- |
|
||||
| `ftvisvocab` | — |
|
||||
| `healy` | — |
|
||||
| `munzner` | — |
|
||||
| `schwabish` | — |
|
||||
| `fewdualaxes` | dual-axis-correlation |
|
||||
| `fewpies` | too-many-pie-slices |
|
||||
| `huff` | truncated-y-axis |
|
||||
| `isenberg2011` | dual-axis-correlation |
|
||||
| `munzner` | incomplete-pie |
|
||||
| `shapeparameter` | aspect-ratio |
|
||||
| `showmenumbers` | too-many-pie-slices |
|
||||
| `spurious` | dual-axis-correlation |
|
||||
| `swd` | dual-axis-correlation |
|
||||
| `tufte` | truncated-y-axis |
|
||||
| `vizwtf` | inverted-y-axis |
|
||||
| `callingbullshit` | inverted-y-axis, truncated-y-axis |
|
||||
| `datatoviz` | dual-axis-correlation, too-many-pie-slices |
|
||||
| `datawrapper` | dual-axis-correlation, too-many-pie-slices |
|
||||
| `eagereyes` | aspect-ratio, too-many-pie-slices |
|
||||
| `fewpies` | incomplete-pie, too-many-pie-slices |
|
||||
| `junkcharts` | inverted-y-axis, too-many-pie-slices |
|
||||
| `truthfulart` | aspect-ratio, dual-axis-correlation |
|
||||
| `vizwtf` | incomplete-pie, inverted-y-axis |
|
||||
| `wilke` | too-many-pie-slices, truncated-y-axis |
|
||||
| `clevelandmcgill` | aspect-ratio, too-many-pie-slices, truncated-y-axis |
|
||||
| `datatoviz` | dual-axis-correlation, incomplete-pie, too-many-pie-slices |
|
||||
| `datawrapper` | dual-axis-correlation, incomplete-pie, too-many-pie-slices |
|
||||
| `economistmistakes` | dual-axis-correlation, inverted-y-axis, truncated-y-axis |
|
||||
| `howchartslie` | aspect-ratio, dual-axis-correlation, inverted-y-axis, truncated-y-axis |
|
||||
|
||||
@@ -74,7 +74,32 @@ we can build.
|
||||
**Citations:** `huff` (the original con), `callingbullshit`, `howchartslie`,
|
||||
`junkcharts`.
|
||||
|
||||
### 2. Pie Slices That Sum to More Than 100% — *Impossible Wholes*, severity 5
|
||||
### 2. Results From a Hand-Picked Subgroup — *Deceptive Framing*, severity 4
|
||||
|
||||
**Poke:** "You didn't pick the wrong chart, you picked the wrong people. The
|
||||
number is real; the group it describes was chosen after the fact."
|
||||
|
||||
The population-shaped twin of entry 1. Rather than trimming the time window, you
|
||||
report the slice of the audience, region or segment where the number flatters —
|
||||
often labelled honestly, which is what makes it feel above board.
|
||||
|
||||
The published `incomplete-pie` specimen is **also an example of this one**: it
|
||||
reports the primary "in the countryside," excluding the capital, on a graphic
|
||||
whose banner argues the capital can't win. Reuse the same image here with a note
|
||||
about this failure mode — that's what the `wild` array is for, and it's the case
|
||||
for keeping these as two pages rather than one.
|
||||
|
||||
Worth its own page rather than folding into entry 1: the tell is different (no
|
||||
axis to inspect — you have to know what got left out), and the fix is different
|
||||
(report the whole population, or every subgroup side by side, not just the
|
||||
flattering one).
|
||||
|
||||
**Charts:** bad = one subgroup's result. Fixed = every subgroup plus the overall
|
||||
figure, same underlying data.
|
||||
|
||||
**Citations:** `callingbullshit`, `howchartslie`, `huff`, `vizwtf`.
|
||||
|
||||
### 3. Pie Slices That Sum to More Than 100% — *Impossible Wholes*, severity 5
|
||||
|
||||
**Poke:** "Your slices add up to 180%. A pie has one job — dividing a whole —
|
||||
and this data has no whole to divide."
|
||||
@@ -97,7 +122,7 @@ pie-chart post says "one pie chart can only show one total and its shares," and
|
||||
it does *not* separately argue that parts must be mutually exclusive. Don't
|
||||
stretch it further than that. Plus `datatoviz`, `junkcharts`.
|
||||
|
||||
### 3. A Pie Chart of Rates or Averages — *Impossible Wholes*, severity 5
|
||||
### 4. A Pie Chart of Rates or Averages — *Impossible Wholes*, severity 5
|
||||
|
||||
**Poke:** "You made a pie out of averages. Adding them together produces a
|
||||
number that means nothing, and that number is your denominator."
|
||||
@@ -120,7 +145,7 @@ same averages, plus the volume behind each one so the weighting is visible.
|
||||
or it is nothing), `datawrapper` (same one-total premise as above), `schwabish`,
|
||||
`ftvisvocab`.
|
||||
|
||||
### 4. Group Averages Shown Without the Distribution — *Hiding the Data*, severity 4
|
||||
### 5. Group Averages Shown Without the Distribution — *Hiding the Data*, severity 4
|
||||
|
||||
**Poke:** "Four bars, four averages, and no idea whether the difference is real."
|
||||
|
||||
@@ -133,7 +158,7 @@ observations, means still marked.
|
||||
|
||||
**Citations:** `wilke`, `healy`, `schwabish`, `datatoviz`.
|
||||
|
||||
### 5. Bubbles Sized by Radius Instead of Area — *Perceptual Traps*, severity 4
|
||||
### 6. Bubbles Sized by Radius Instead of Area — *Perceptual Traps*, severity 4
|
||||
|
||||
**Poke:** "You doubled the number and quadrupled the ink."
|
||||
|
||||
@@ -148,7 +173,7 @@ position does the work.
|
||||
|
||||
**Citations:** `munzner`, `clevelandmcgill`, `tufte`, `howchartslie`.
|
||||
|
||||
### 6. Stacked Segments Without a Shared Baseline — *Perceptual Traps*, severity 3
|
||||
### 7. Stacked Segments Without a Shared Baseline — *Perceptual Traps*, severity 3
|
||||
|
||||
**Poke:** "Only the bottom band of a stacked chart has a straight edge to
|
||||
measure against. The rest are guesses."
|
||||
@@ -175,7 +200,7 @@ out to its own zero baseline), totals preserved.
|
||||
|
||||
**Citations:** `datawrapper`, `wilke`, `munzner`, `ftvisvocab`.
|
||||
|
||||
### 7. Categories Sorted Alphabetically Instead of by Value — *Sloppy Craft*, severity 2
|
||||
### 8. Categories Sorted Alphabetically Instead of by Value — *Sloppy Craft*, severity 2
|
||||
|
||||
**Poke:** "Your categories are sorted by name. Nobody wants to know which
|
||||
region starts with A."
|
||||
@@ -210,6 +235,16 @@ rediscovering them:
|
||||
too: the fixed chart needs a sequential ramp validated on `--chart-canvas` in
|
||||
both themes. Don't draft this one until a real source is in hand.
|
||||
|
||||
## Two new levers, as of the first wild specimen
|
||||
|
||||
- **`wild`** — real examples, credited and linked, rendered above the citations.
|
||||
Zero, one or many per sin. A specimen that commits two sins belongs on both
|
||||
pages, with a different note on each; that's a reason to split sins, not merge
|
||||
them.
|
||||
- **`related`** — cross-links between sins, validated at build. Charts rarely
|
||||
break one rule at a time, and the person you sent a link to may need the
|
||||
neighbouring page more than the one they landed on.
|
||||
|
||||
## Conventions reminder
|
||||
|
||||
Note what the two pie entries above do and don't say. Neither condemns the pie
|
||||
|
||||
Reference in New Issue
Block a user