Long Descriptions for Complex Charts
Permalink to "Long Descriptions for Complex Charts"Some charts carry more than a sentence and a table can convey: a multi-panel figure, a network diagram, a chart whose shape matters (a distribution with two peaks), or an annotated timeline of events. For these, a long description explains the chart’s structure, its main patterns and important details in an order that makes sense when read. It is not a replacement for the data table but a guide to what the data shows.
This guide belongs to data visualization chart alternatives.
Spec reference
Permalink to "Spec reference"- SC 1.1.1 Non-text Content (A) — complex images need a short alternative plus a long description when information cannot be conveyed briefly.
- SC 1.3.1 (A) — the long description associated with the chart (link,
aria-describedby, or adjacent placement). - WAI Images tutorial: complex images — recommends a short description and a long description available to all users.
- SC 2.4.4 Link Purpose (A) — a link to the description says what it leads to.
When to use — and when not to
Permalink to "When to use — and when not to"Write a long description when the chart’s message depends on shape, structure or many relationships that a summary cannot cover and a table does not make obvious.
Do not write a long description for simple charts; a summary and table are better. The misapplication: a long description that narrates every data point in sequence, which is a worse table.
Annotated code example
Permalink to "Annotated code example"<figure>
<img src="admissions.svg" alt="Hospital admissions by age group, 2020–2025. Long description follows."
aria-describedby="ld-adm">
<figcaption>Admissions peaked twice each year; the over-75 group drove winter peaks.
<a href="#ld-adm">Long description</a> · <a href="#tbl-adm">Data table</a></figcaption>
</figure>
<section id="ld-adm" aria-labelledby="ld-adm-h">
<h3 id="ld-adm-h">Long description: hospital admissions by age group</h3>
<h4>Structure</h4>
<p>A stacked area chart. Horizontal axis: months, January 2020 to December 2025. Vertical axis: weekly admissions, 0 to 2,000. Five age bands stacked from youngest (bottom) to oldest (top).</p>
<h4>Main patterns</h4>
<ul><li>Each year has a winter peak (December–February) and a smaller late-summer peak.</li>…</ul>
<h4>Notable details</h4>
<ul><li>The highest week was 1,940 admissions in January 2022.</li>…</ul>
</section>
Keyboard & AT behaviour
Permalink to "Keyboard & AT behaviour"| Element | Screen reader experience |
|---|---|
| Image alt | Short name plus “Long description follows” |
| Description section | Headings allow jumping to Structure, Patterns, Details |
| Link “Long description” | Moves to section |
| aria-describedby | Some readers read the whole description on focus; keep it on the section, not a hidden copy |
| Data table link | Exact values |
Step-by-step implementation
Permalink to "Step-by-step implementation"- Check whether you need it. If a summary plus a table makes the chart’s point, stop there.
- Describe structure. Chart type, axes with ranges, series, colour or pattern encodings and any annotations.
- Describe patterns. The two or three main things a sighted reader would notice, in order of importance.
- Add details. Outliers, specific events, exceptions — each as a list item.
- Place and link. Put it below the chart or in a disclosure with headings, link from the caption and keep it next to the data table.
Integration context
Permalink to "Integration context"Short summaries are covered in writing chart summaries and key takeaways, names in naming charts and figures with figcaption, and tables in show-as-table toggles for charts. Network diagrams, which often need long descriptions, are covered in announcing graph structure summaries. Sonification can complement descriptions, as discussed in sonifying time series charts.
Gotchas
Permalink to "Gotchas"aria-describedby on long content. Screen readers may read the entire description in one go when the chart receives focus; link to a visible section instead or keep describedby to the summary.
longdesc. The longdesc attribute is obsolete in HTML and poorly supported; use links.
Out-of-date descriptions. When charts update, descriptions must too; generate the data-dependent parts.
Edge cases
Permalink to "Edge cases"- Interactive charts. Describe the default view and note what interactions reveal.
- Small multiples. Describe the shared structure once, then differences between panels.
- Maps. Describe geographic patterns by region names users know.
Worked example
Permalink to "Worked example"A climate research article included a multi-panel figure of temperature anomalies by region over a century. Alt text said “Figure 3”. The authors wrote a long description with headings for structure, main patterns (warming accelerating after 1980, strongest in the Arctic panel) and notable details (two cooling periods after volcanic eruptions), placed in a disclosure below the figure and linked to data. Blind researchers reviewing the paper could follow the argument without the figure.
Common mistakes
Permalink to "Common mistakes"- Narrating every data point.
- Hidden descriptions only screen readers can reach.
- No structure or headings.
- Descriptions that no longer match the chart.
Testing checklist
Permalink to "Testing checklist"Testing it with a screen reader
Permalink to "Testing it with a screen reader"With NVDA, reach the chart and follow the “Long description” link. Use H to jump between Structure, Main patterns and Notable details, and check each section makes sense without the chart. Confirm focusing the chart does not read the entire description automatically. Ask a colleague who has not seen the chart to sketch it from the description; mismatches show what is missing.
Writing style for descriptions
Permalink to "Writing style for descriptions"Write in short sentences and the present tense. Use the same terms as the chart’s labels so users can match them with the data table. Spell out abbreviations once. Describe direction relative to the axes (“rises from left to right” means “increases over time”; say the latter). Avoid colour names unless the chart’s legend uses them, and if it does, add the pattern or position as well. Keep each list item to a single observation.
Generating the data-driven parts
Permalink to "Generating the data-driven parts"For charts that refresh, split the description into a fixed part (structure and encodings, written once) and a generated part (patterns and details, computed from data). Rules can find peaks, troughs, the largest changes and outliers and phrase them with templates. Have an editor review the templates against real data periodically, because rules that worked for one season’s data can produce misleading statements for another.
Key points
Permalink to "Key points"Write long descriptions only when needed, structure them from general to specific, keep them visible and linked, and regenerate the data-dependent parts when the chart changes.
Design system notes
Permalink to "Design system notes"Provide a long description slot in the figure component with a heading structure and a link pattern, and allow generated sections for data-driven parts.
FAQ
Permalink to "FAQ"How long is "long"?
As long as needed, usually a few short sections.
Should it be hidden from sighted users?
No; make it visible or easily revealed.
Is longdesc still valid?
No; use a link or adjacent section.
Can it replace the data table?
No; it explains, the table provides values.
Should I describe colours?
Describe encodings, with patterns or positions as well as colour names.
Who should write it?
The person who understands the chart’s purpose, often the author.
Related
Permalink to "Related"- Writing chart summaries and key takeaways — short summaries
- Announcing graph structure summaries — networks
- Sonifying time series charts — sound as an alternative