Skip to content
Back to skills

Data Viz

ASecurity

Honest, Tufte-informed web data visualization. Use for charts, dashboards, metrics, KPI tiles, sparklines, chart accessibility, chartjunk removal, genre choice, lie-factor checks, direct labels, data tables, and themed SVG/HTML.

  • 9 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 2, 2026
ai-agentsgo

Security analysis

A100/100

Pro scans all 6 files and shows the line behind each finding

Scanned September 20, 2026

npx -y skills add KyaniteLabs/tastecheck --skill data-viz --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Data Viz?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Data Viz
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kyanitelabs-data-viz/badge)](https://www.skillsdirectory.com/skills/kyanitelabs-data-viz)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: data-viz
description: >-
  Honest, Tufte-informed web data visualization. Use for charts, dashboards,
  metrics, KPI tiles, sparklines, chart accessibility, chartjunk removal,
  genre choice, lie-factor checks, direct labels, data tables, and themed SVG/HTML.
---

# Data Viz (honest, web-native, Tufte)

Make web-native charts with honest marks: tokenized, responsive, accessible. Reuse
type, spacing, surface, color tokens; one accent adds craft but never competes with data.
Use Tufte tooling when present.

## Decision order

1. State comparison question, source/grain, missingness, and uncertainty.
2. Prefer a table for small exact lookup; chart shape, change, or comparison.
3. Encode honestly (zero-baseline bars; 1-D length/position; lie factor ≈1), direct-label,
   and remove non-data ink.
4. Provide tokenized, responsive, contrast-safe chart/table parity; keep data keyboard reachable.

## Data quality

Before genre, record question, unit, time grain, source, and absent status. A missing
month can mean **zero**, **not observed**, **suppressed**, **not applicable**, or **not yet
reported**; these states cannot share a mark, line, or cell treatment.

Name the uncertainty band (e.g. confidence interval, forecast range, or measurement error),
level if known, and shared method. Missing values, units, provenance, or interval meaning means
stop at a representation spec/data-request checklist. Never invent a trend, interpolate a gap,
or manufacture an empty chart.

For sparse monthly series, prefer an observed-month table or interval strip. If a line helps,
break it at missing observations, plot estimated uncertainty only, label the gap, and never
imply continuity with a continuous area.

## Genre selection

| Data shape | Use | Not |
|---|---|---|
| Small; exact lookup | **table** (or supertable) | slow-lookup chart |
| 1 series/time | line / **sparkline** | 3D, decorative area |
| Few categories/one value | **zero bar**, direct-labeled | pie (hard angles) |
| Part-to-whole, 2–4 | bar/stacked; number + bar | pie/donut (>3 slices) |
| Many series/facets | **small multiples** (shared scale) | spaghetti |
| Group distribution | quartile/box or strip | bar-of-averages |
| Two variables | scatter with **range frame** | bordered box + gridlines |
| Table-row trend | inline **sparklines** | separate chart page |
| Geographic/multivariate | map / Minard-style layered | rainbow choropleth |

**Default-challenge rule:** justify an unprompted pie, 3-color bar, or spaghetti line, or use
a stronger Tufte move (table, small multiples, sparkline, range frame).

### Refuse misleading requests

Refuse a dramatic 3-D chart because depth, perspective, and occlusion encode absent values.
Name the distortion; offer the smallest honest alternative: direct-labeled interval strip,
observed-month table, shared-scale small multiple, or zero-baseline bar.

## Non-negotiables

- **Table for lookup; chart for shape.** A 12-month trend may deserve a line; a 40-cell audit
  may belong in a sortable table.
- **Bars start at zero when length encodes magnitude.** For floating ranges or deltas, use
  explicit interval/difference encoding, not a truncated bar.
- **Use position or length for comparison.** Never exaggerate area or volume. Redundant
  color-plus-shape, label, or pattern aids identification/accessibility; channels must agree.
- **Lie factor ≈ 1.0** (visual-change% ÷ data-change%, acceptable 0.95–1.05); check
  dramatic proportions.
- **Direct labels, not a legend** where feasible; label line end/bar.
- **Kill chartjunk:** no heavy gridlines, non-data fills/gradients, drop shadows, decorative
  imagery, or non-data borders.
- **Limit hues to distinguishable colors; color is never the only channel.** Use position,
  direct label, or pattern too (color-blind + WCAG 1.4.1). Series colors come from
  `color-system` tokens and must hit ≥3:1 vs background and adjacent series.
- **Works in dark mode** (re-check axes/text contrast).
- **Responsive** — SVG `viewBox`/fluid width; no fixed px overflow at 320px.
- **Every chart has a text equivalent** — takeaway caption plus accessible data table
  (visually-hidden or toggle); non-sighted users get the numbers.

## Quick-start

Use `assets/chart-starter.html`; keep range-frame axis, direct end labels, caption, and parity.

## References

- `references/tufte-and-genres.md` — data-ink, lie factor, genres.
- `references/web-and-a11y.md` — tokens, SVG, parity.
- `references/decision-records.md` — novel-case ADR rules.

## Evidence

Chart/table expose the same value, unit, uncertainty, missingness, source, and filter. Caption
what can/cannot be concluded; record quality, genre choice/refusal, encoding, parity, and
rendered evidence.

## Check

1. Table/genre fits the comparison, not a default?
2. Zero bars, 1-D encoding, lie factor ≈1, direct labels/range frame, no chartjunk?
3. Tokenized ≤5-hue non-color encoding, ≥3:1 contrast, dark mode, 320px behavior?
4. Caption/table retain source, unit, uncertainty, filters, missingness; gaps imply no continuity.

## How to deliver

State genre/rationale, material lie factor, parity, caption, contrast, and theming evidence.
Use specialist Tufte tooling only when available.

## Provenance

This is an independent web-and-accessibility synthesis of Tufte principles; use
specialist assessment/rendering tools when available.

<!-- contract:v1:start -->
## Contract (generated)

Canonical detail: [contract.json](contract.json).

- Route: Data needs a chart, table, uncertainty treatment, or accessible comparison.; avoid: There is no data subject or the request is only a decorative illustration.
- Exclude: Do not choose a chart before identifying the comparison task. (+1 in contract.json)
- Stop / handoff: Stop when the data provenance or comparison question is missing. (+1 in contract.json); receives [color-system, design-system-interview, improve-existing-website, tasteroll] -> sends [a11y-pass, empty-states, tastecheck-pass]
- Output: honest chart/table recommendation and implementation plan
- Evidence: `table_with_evidence` with `status`, `reason`, `remediation`, `evidence`, `provenance`.
<!-- contract:v1:end -->

Files in this skill

  • SKILL.md7.7 KB
  • assets/chart-starter.html10.4 KB
  • contract.json1.8 KB
  • references/decision-records.md3.2 KB
  • references/tufte-and-genres.md3.9 KB
  • references/web-and-a11y.md3.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.