Individual skill
tufte-data-viz
Use when creating, reviewing, or styling charts, graphs, dashboards, sparklines, or any data visualization. Applies to Recharts, ECharts, Chart.js, matplotlib, Plotly, seaborn, D3.js, and SVG. Enforces Tufte principles (data-ink ratio, direct labeling, range-frame axes) plus modern screen-first standards (accessibility, responsive, dark mode).
SKILL.md
Source commit ae7ca0de7819db83241b24a2618810d5f1171145
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- Yes
- Repository scan complete
- Yes
- Skill scan complete
- Yes
- Observed behavior
- Local scripts
- Last checked
- Nov 11, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
Claude Code
Destination .claude/skills/tufte-data-viz
(
set -euo pipefail
destination='./.claude/skills/tufte-data-viz'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/caylent/tufte-data-viz.git' "$work/repo"
git -C "$work/repo" checkout --detach ae7ca0de7819db83241b24a2618810d5f1171145
git -C "$work/repo" archive --format=tar 'ae7ca0de7819db83241b24a2618810d5f1171145' > "$work/skill.tar"
mkdir -p -- './.claude/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)Codex
Destination .agents/skills/tufte-data-viz
(
set -euo pipefail
destination='./.agents/skills/tufte-data-viz'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/caylent/tufte-data-viz.git' "$work/repo"
git -C "$work/repo" checkout --detach ae7ca0de7819db83241b24a2618810d5f1171145
git -C "$work/repo" archive --format=tar 'ae7ca0de7819db83241b24a2618810d5f1171145' > "$work/skill.tar"
mkdir -p -- './.agents/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)Cursor
Destination .cursor/skills/tufte-data-viz
(
set -euo pipefail
destination='./.cursor/skills/tufte-data-viz'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/caylent/tufte-data-viz.git' "$work/repo"
git -C "$work/repo" checkout --detach ae7ca0de7819db83241b24a2618810d5f1171145
git -C "$work/repo" archive --format=tar 'ae7ca0de7819db83241b24a2618810d5f1171145' > "$work/skill.tar"
mkdir -p -- './.cursor/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)Gemini CLI
Destination .gemini/skills/tufte-data-viz
(
set -euo pipefail
destination='./.gemini/skills/tufte-data-viz'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/caylent/tufte-data-viz.git' "$work/repo"
git -C "$work/repo" checkout --detach ae7ca0de7819db83241b24a2618810d5f1171145
git -C "$work/repo" archive --format=tar 'ae7ca0de7819db83241b24a2618810d5f1171145' > "$work/skill.tar"
mkdir -p -- './.gemini/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)GitHub Copilot
Destination .github/skills/tufte-data-viz
(
set -euo pipefail
destination='./.github/skills/tufte-data-viz'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/caylent/tufte-data-viz.git' "$work/repo"
git -C "$work/repo" checkout --detach ae7ca0de7819db83241b24a2618810d5f1171145
git -C "$work/repo" archive --format=tar 'ae7ca0de7819db83241b24a2618810d5f1171145' > "$work/skill.tar"
mkdir -p -- './.github/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)OpenCode
Destination .opencode/skills/tufte-data-viz
(
set -euo pipefail
destination='./.opencode/skills/tufte-data-viz'
if [ -e "$destination" ] || [ -L "$destination" ]; then printf '%s\n' 'Destination already exists; nothing overwritten.' >&2; exit 1; fi
work=$(mktemp -d)
trap 'rm -rf -- "$work"' EXIT
git clone --filter=blob:none --no-checkout -- 'https://github.com/caylent/tufte-data-viz.git' "$work/repo"
git -C "$work/repo" checkout --detach ae7ca0de7819db83241b24a2618810d5f1171145
git -C "$work/repo" archive --format=tar 'ae7ca0de7819db83241b24a2618810d5f1171145' > "$work/skill.tar"
mkdir -p -- './.opencode/skills'
mkdir -- "$destination"
tar -xf "$work/skill.tar" -C "$destination"
)Repository context
- Repository stars (not skill ratings)
- 235
- Repository last updated
- Feb 19, 2026
- License
- MIT
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- agent-skills Repository topic
- chartjs Repository topic
- claude-code Repository topic
- data-visualization Repository topic
- echarts Repository topic
- matplotlib Repository topic
- plotly Repository topic
- recharts Repository topic
- tufte Repository topic
- data Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
LICENSEasset · 1,064 bytesREADME.mddoc · 6,033 bytesSKILL.mdcore · 13,970 bytes_docs/before-after-animated.gifasset · 454,541 bytes_docs/before-after.pngasset · 187,106 bytes_docs/generate_showcase.pyruns · 26,570 bytes_docs/small-multiples.pngasset · 102,539 bytes_docs/tufte-accessible-scatter.pngasset · 93,540 bytes_docs/tufte-bar-chart.pngasset · 68,861 bytes_docs/tufte-dark-mode.pngasset · 121,675 bytes_docs/tufte-data-table.pngasset · 88,857 bytes_docs/tufte-light-dark.pngasset · 107,221 bytes_docs/tufte-line-chart.pngasset · 130,234 bytes_docs/tufte-slopegraph.pngasset · 111,473 bytes_docs/tufte-sparklines.pngasset · 84,602 bytesdocs/index.htmlasset · 49,000 bytesexamples/chartjs-tufte-plugin.jsruns · 4,880 bytesexamples/echarts-tufte-theme.tsruns · 4,489 bytesexamples/matplotlib-tufte-annotated.pyruns · 3,938 bytesexamples/plotly-tufte-template.pyruns · 4,261 bytesexamples/recharts-tufte-bar.tsxruns · 2,285 bytesexamples/recharts-tufte-line.tsxruns · 5,099 bytesexamples/sparkline-inline.svgasset · 800 bytesrules/anti-patterns.mddoc · 6,864 bytesrules/chartjs.mddoc · 8,319 bytesrules/echarts.mddoc · 7,320 bytesrules/interactive-and-accessible.mddoc · 7,731 bytesrules/matplotlib.mddoc · 8,131 bytesrules/plotly.mddoc · 6,243 bytesrules/recharts.mddoc · 9,489 bytesrules/small-multiples-sparklines.mddoc · 9,959 bytesrules/svg-html.mddoc · 7,526 bytesrules/typography-and-color.mddoc · 5,832 bytes
Read excerpt
# Tufte Data Visualization
Apply Edward Tufte's principles whenever generating or reviewing code that renders data visually. This skill covers chart generation, not slide/presentation design.
## Workflow
Follow these steps in order when creating any chart:
### Step 1: Identify the message
Before writing code, determine:
1. The key finding or trend the chart must make visible.
2. The comparison context — a baseline, prior period, target, or peer group. A number without context is meaningless.
3. The chart type that best fits the data structure (see Chart type guidance below).