8 Anti-Pattern Pairs
โŒ Don't
Pie Chart
Angle decoding is imprecise. Humans cannot accurately judge wedge area or arc length. Playfair's "off day" โ€” Tufte.
ChatGPT Gemini DeepSeek Claude Other
Rule: angle decoding unreliable ยท Legend = eye travel
โœ… Do
100% Stacked Bar
Length along a shared baseline. Rank clearly, read precisely. Direct labels eliminate the legend.
ChatGPT 69% Gemini 8.5% DeepSeek 4% Claude 2%
Tufte: bar superior to pie for part-to-whole ยท Few: direct label
โŒ Don't
Non-Zero Baseline (Lie Factor > 1)
Truncating the Y-axis magnifies differences that don't exist in the data. The visual effect is far larger than the actual effect.
80 50 A B C D Axis starts at 50 โ†’ Lie Factor > 1
Tufte: Lie Factor = visual effect รท data effect ยท must equal 1.0
โœ… Do
Zero Baseline โ€” Lie Factor 1.0
All bars start at zero. The visual ratio between bars exactly equals the data ratio. No deception.
0 A B C D
Framework v3: zero baseline mandatory for bar charts (not line charts)
โŒ Don't
3D Bars / False Perspective
3D extrusion creates occlusion (hidden data), distorts bar lengths, and fills the graphic with non-data ink. "Computer debris." โ€” Tufte.
Occlusion + distortion + non-data ink
Tufte: 3D = "administrative debris" ยท hides data ยท distorts length
โœ… Do
Flat 2D Bars
Length on a flat axis is the most preattentively accurate encoding. No occlusion. Zero non-data ink from perspective.
120 80 50
Framework v3: length encoding superior to all 3D variants
โŒ Don't
Color Legend
Every legend lookup forces the eye to travel away from the data, decode the mapping, and return. Multiplied by every data point read.
ChatGPT Claude legend = eye travel on every read
Few: legends impose lookup cost ยท eliminate when direct labelling possible
โœ… Do
Direct Labels on Line Ends
Labels at the end of each series eliminate all legend lookups. Reader never leaves the data area.
ChatGPT Claude
Framework v3: direct label rule ยท dash pattern distinguishes series
โŒ Don't
High-Saturation Rainbow Palette
Rainbow palettes imply an ordinal relationship between categories when none exists. High saturation creates visual vibration (the "1+1=3 Effect").
rainbow = implied ordering + visual vibration
Framework v3: 1+1=3 Effect ยท โ‰ค4 distinct hues ยท colorblind safety
โœ… Do
Single Hue โ€” Saturation Only
One hue, varying in saturation or lightness, encodes magnitude without implying categorical distinction.
single hue ยท saturation encodes magnitude
Framework v3: single-hue rule ยท bar/main with opacity variation
โŒ Don't
Heavy Gridlines (Chartjunk)
Full-width grid lines at every tick compete with the data for visual attention. They are administrative debris โ€” structure for structure's sake.
gridlines compete with data signal
Tufte: gridlines are chartjunk ยท erase everything non-data
โœ… Do
Range-Frame or No Grid
The axis tick only at min and max data values. No full-width lines. The data stands alone on white space.
high low Claude
Tufte: range-frame ยท data-ink ratio maximised
โŒ Don't
Dots on Every Data Point
Filled dots on every point create visual noise and imply precision in interpolated values. The line already encodes position.
dots add noise ยท line already encodes position
Framework v3: line without dots + end-value label = sufficient
โœ… Do
Line Only + End-Value Label
The polyline alone carries all positional information. One end-value label gives the final magnitude. Clean.
45M
Tufte: sparkline principle ยท remove all non-data ink from line
โŒ Don't
Gauge / Speedometer
Gauges waste 75% of their area on decoration. Angle encoding is imprecise. They cannot show comparison, target, or qualitative range simultaneously.
74% wastes space ยท angle imprecise ยท no target
Few: gauge replaced by bullet graph ยท speedometer = "video game aesthetic"
โœ… Do
Bullet Graph (Few, 2006)
One bar shows actual. A perpendicular line shows target. Muted bands show qualitative range. 5ร— more data in the same space.
Spend Target $74K (+23%) actual ยท target ยท qualitative bands โ€” 1 bar
Few: Bullet Graph spec โ€” actual + target + quality range in one visual