Table view and texture
Every chart gets a table twin; texture is opt-in for accessibility.
From dataviz (references/marks-and-anatomy.md, palette.md).
A table twin for every chart
Find Q3 Travel with the mouse, then keyboard only.
Chart onlyBad
values: hover only
Table twin
Good
view: chart<div role="group" aria-label="View">
<button aria-pressed="true">Chart</button>
<button aria-pressed="false">Table</button>
</div>
<svg role="img" aria-label="Spend by quarter">…</svg>
<table hidden><caption>Spend by quarter ($k)</caption>…</table>
Texture survives grayscale
Set Achromatopsia, then turn Texture on.
0° / 90° hatchingBad
rotate(0) · rotate(90) · both45° / 135° tonalGood
rotate(45) · rotate(-45) · both, ink = darker step.tex { opacity: 0; }
:root[data-a11y-texture] .tex { opacity: 1; }
@media print, (forced-colors: active) { .tex { opacity: 1; } }
Ordered texture for values
Turn on Achromatopsia and Texture, then drag Shift.
Cycles by columnBad
angle = columnAngle and densityGood
/ over · \ under · none = neutralconst tex = bin === 0 ? null : {
angle: v > 0 ? 45 : -45,
gap: [0, 7, 5, 3.5][bin],
};
Why it matters, pros and cons
Why it matters
The table is the accessible equivalent and lets sub-3:1 fills ship. Texture carries identity where hue fails, and stays off unless asked for.
Pros
- Every value reachable without a tooltip.
- Sub-3:1 slots become legal.
- Survives grayscale print.
Cons
- Two angles only; past three series, facet instead.
- Patterns and forced-colors styles add surface.
- Never ship texture as a style choice.