An agent skill that applies Edward Tufte's data visualization principles when generating charts, plots, and graphs. Produces clean, honest, high-data-ink-ratio visualizations across multiple charting libraries — extended with modern screen-first standards for accessibility, responsiveness, and interactivity.
This skill is opinionated by design. It will remove your gridlines, delete your legends, reject your pie charts, and insist on serif fonts. It enforces a specific visual philosophy — Tufte's — not a neutral one. If you want total creative freedom over your chart styling, this is not the skill for you. If you want every chart to come out clean, honest, and readable without thinking about it, read on.
npx skills add caylent/tufte-data-vizThe same data, default styling vs. Tufte principles applied:
See it happen live — gridlines fade, legends become direct labels, chartjunk dissolves:
Try the live demo — toggle between default and Tufte styling across ECharts, Chart.js, Plotly, and D3.js. Includes dark mode.
22 universal rules applied to every chart, organized in three tiers:
Static principles (rules 1–14) — the Tufte foundation:
- Maximize data-ink ratio — remove gridlines, borders, legends, and decoration that don't convey data
- Direct labeling, range-frame axes, no 3D, no pie charts (unless forced), no dual y-axes
- Serif typography, off-white backgrounds, gray as primary color with selective highlighting
- Annotate notable features, show comparison context, minimal tooltips
Screen-first principles (rules 15–19) — modern interactive contexts:
- Progressive disclosure (overview first, details on hover/tap/click)
- WCAG accessibility (contrast ratios, dual encoding, keyboard nav, screen reader text alternatives)
- Responsive design (fluid/adaptive strategies, touch targets, mobile-adapted chart types)
- Purposeful animation (data transitions only, respect
prefers-reduced-motion) - Intentional dark mode (semantic color tokens, never invert, reduce saturation)
Content & formatting (rules 20–22) — what Tufte assumed but never codified:
- Titles assert findings ("Revenue Surged 23%"), not axis descriptions
- Numbers formatted for humans ($1.2M, thousand separators, matched precision)
- Don't chart what a sentence or table can say better
| Library | Rule file | Language |
|---|---|---|
| Recharts | rules/recharts.md |
React/JSX |
| ECharts | rules/echarts.md |
JavaScript |
| Chart.js | rules/chartjs.md |
JavaScript |
| matplotlib | rules/matplotlib.md |
Python |
| Plotly | rules/plotly.md |
Python/JS |
| D3.js / SVG / HTML | rules/svg-html.md |
Web |
rules/interactive-and-accessible.md— progressive disclosure, accessibility, responsive, animation, dark moderules/typography-and-color.md— font stacks, palettes, hex valuesrules/anti-patterns.md— common violations and one-liner fixesrules/small-multiples-sparklines.md— small multiples, sparklines, slopegraphs
- The Visual Display of Quantitative Information (1983)
- Envisioning Information (1990)
- Visual Explanations (1997)
- Beautiful Evidence (2006)
MIT










