Skip to content
Testing
Skill

/kb-data-visualization-accessibility

Reference data, not a reviewer. Audit charts and graphs for accessibility: SVG ARIA, data table alternatives, keyboard interaction, color-safe palettes, and library APIs.

From plugin
accessibility-agents
431113 skills7 hooks

Claude Code

$ npx -y skills add Community-Access/accessibility-agents --skill kb-data-visualization-accessibility --agent claude-code

SKILL.md

kb-data-visualization-accessibility.SKILL.md
name: kb-data-visualization-accessibility
description: "Reference data, not a reviewer. Audit charts and graphs for accessibility: SVG ARIA, data table alternatives, keyboard interaction, color-safe palettes, and library APIs."
license: MIT
disable-model-invocation: true
user-invocable: false
metadata:
  tier: reference
  domain: cross-cutting
  output: none
  effort: low
  title: Data Visualization Accessibility

Data Visualization Accessibility Skill

Reference data for making charts, graphs, dashboards, and interactive data visualizations accessible. Used by `data-visualization-accessibility` agent.

---

Chart Accessibility by Type

Bar/Column Charts

  • Provide a text summary of the key takeaway (e.g., "Sales increased 40% in Q4")
  • Include a data table alternative (visually hidden or toggleable)
  • Each bar should be keyboard-focusable with a tooltip announcing the value
  • Use patterns or textures in addition to color to distinguish series

Line Charts

  • Describe the trend in alt text (e.g., "Upward trend from January through June, then decline")
  • Provide data table with all data points
  • Keyboard navigation: Left/Right arrows move between data points, value announced on focus
  • Use distinct line styles (solid, dashed, dotted) alongside colors

Pie/Donut Charts

  • Accompany with a data table showing percentages
  • Each segment keyboard-focusable with percentage and label announced
  • Use patterns/hatching - color-only distinction fails WCAG 1.4.1
  • Consider: pie charts are generally poor for accessibility; a bar chart + table is often better

Scatter Plots

  • Provide summary statistics (mean, median, correlation) as text
  • Data table with all points is essential
  • Interactive exploration via keyboard may not be feasible for large datasets - prioritize the summary

Treemaps / Heatmaps

  • Provide hierarchical data table alternative
  • Keyboard navigation through segments with value announcements
  • Color scales must have sufficient contrast between adjacent levels

SVG Accessibility Patterns

Static Chart (Image-like)

<figure>
  <svg role="img" aria-labelledby="chart-title chart-desc">
    <title id="chart-title">Monthly Revenue 2025</title>
    <desc id="chart-desc">Bar chart showing revenue from January through December.
      Revenue grew from $50K in January to $120K in December with a dip in July.</desc>
    <!-- chart elements -->
  </svg>
  <figcaption>Figure 1: Monthly Revenue 2025. <a href="#revenue-table">View data table</a></figcaption>
</figure>

Interactive Chart

<svg role="group" aria-roledescription="interactive chart" aria-label="Monthly Revenue">
  <g role="list" aria-label="Revenue data points">
    <rect role="listitem" tabindex="0" aria-label="January: $50,000" .../>
    <rect role="listitem" tabindex="0" aria-label="February: $55,000" .../>
  </g>
</svg>
<div aria-live="polite" class="sr-only" id="chart-announcements"></div>

Decorative Charts

<svg aria-hidden="true" focusable="false">
  <!-- decorative background chart -->
</svg>

Chart Library Accessibility APIs

Highcharts

Highcharts.chart('container', {
  accessibility: {
    enabled: true,
    description: 'Chart showing quarterly revenue growth',
    point: {
      valueDescriptionFormat: '{point.name}: {point.y} dollars'
    },
    keyboardNavigation: {
      enabled: true,
      order: ['series', 'zoom', 'rangeSelector', 'legend', 'chartMenu']
    }
  },
  // Sonification needs the sonification module
  sonification: {
    enabled: true
  }
});

**Highcharts a11y features** (load `modules/accessibility.js`; without it the chart lacks them):

  • Data table view, which needs the `exporting` and `export-data` modules (`exporting.showTable: true` shows it on render)
  • Keyboard navigation between data points
  • Screen reader announcements for each point
  • Sonification (data as sound)
  • High contrast mode support

Chart.js

new Chart(ctx, {
  type: 'bar',
  data: { /* ... */ },
  options: {
    plugins: {
      // Chart.js has limited built-in accessibility
      // Use chartjs-plugin-a11y-legend for legend accessibility
      // Use chartjs-plugin-datalabels for visible data values
    }
  }
});
// Chart.js renders to <canvas> - provide a fallback table or aria-label on canvas

**Chart.js limitations:**

  • Canvas-based - no DOM elements for screen readers to traverse
  • Must provide `<canvas aria-label="..." role="img">` or a fallback `<table>`
  • No built-in keyboard navigation - requires custom implementation

D3.js

D3 renders to SVG - accessibility must be manually implemented:

// Add ARIA to each data element
bars.attr('role', 'listitem')
    .attr('tabindex', '0')
    .attr('aria-label', d => `${d.name}: ${d.value} units`);

// Add keyboard navigation
bars.on('keydown', (event, d) => {
  if (event.key === 'ArrowRight') { /* focus next bar */ }
  if (event.key === 'ArrowLeft') { /* focus previous bar */ }
});

Recharts (React)

<BarChart data={data} accessibilityLayer>
  <Bar dataKey="value" />
</BarChart>

**Recharts:** `accessibilityLayer` adds keyboard navigation and basic ARIA attributes, and is on by default in Recharts 3 (set it explicitly on 2.x). Supplement with a data table.

Data Table Fallback Template

<details>
  <summary>View data table</summary>
  <table id="revenue-table">
    <caption>Monthly Revenue 2025</caption>
    <thead>
      <tr>
        <th scope="col">Month</th>
        <th scope="col">Revenue ($)</th>
        <th scope="col">Change (%)</th>
      </tr>
    </thead>
    <tbody>
      <tr><td>January</td><td>50,000</td><td>n/a</td></tr>
      <tr><td>February</td><td>55,000</td><td>+10%</td></tr>
    </tbody>
  </table>
</details>

Color-Safe Palettes

Palettes that remain distinguishable under common forms of color vision deficiency:

Wong Palette (8 colors - CVD safe)

Each color, with its hex

Read more
@community-access
Ships withaccessibility-agents

WCAG 2.2 AA enforcement for agentic coding, as a set of Agent Skills. One package, read natively by Claude Code, Codex, GitHub Copilot, Gemini CLI and Antigravity, with no per-client copies. Models forget accessibility while generating code.

Stars on GitHub

Momentum

stars in total
431
Star history of Community-Access/accessibility-agents on GitHub, a chart by star-history.com

Other skills on accessibility-agents.

More skills from other plugins.

api-review

api-review

Produce the "Playwright 1.xx API Review" artifact for a range of commits - the public API additions and the breaking or behavior…

@microsoft@microsoftInstall Skill
add-e2e-selectors

add-e2e-selectors

Add reliable @grafana/e2e-selectors to interactive elements and key containers in the Grafana frontend. Use when adding e2e…

grafanatoday78k
@grafana@grafanaInstall Skill
promptfoo-evals

promptfoo-evals

Write, refine, run, and QA promptfoo evaluation suites: promptfooconfig.yaml, prompts, providers, vars, tests, assertions,…

@promptfoo@promptfooInstall Skill
deepeval

deepeval

DeepEval evaluation workflow for AI agents and LLM applications. TRIGGER when the user wants to evaluate or improve an AI agent,…

@confident-ai@confident-aiInstall Skill

Questions about kb-data-visualization-accessibility.

Which coding agents can use kb-data-visualization-accessibility?
kb-data-visualization-accessibility installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.