Skip to content
  • System
  • Light
  • Dark
  • High contrast

RadarChart

POUR principle scores

Radar chart, 4 points. Perceivable to Robust. Values from 65 to 90.

PerceivableOperableUnderstandableRobust
import { RadarChart } from '@eekodigital/raster';

<RadarChart
  axes={['Perceivable', 'Operable', 'Understandable', 'Robust']}
  series={[{ name: 'Current', data: [80, 65, 90, 70] }]}
  title="POUR principle scores"
/>

Compare current state against a target or another audit.

Current vs target POUR scores

Radar chart, 2 series, 8 points. Perceivable to Robust. Values from 65 to 100.

PerceivableOperableUnderstandableRobust
CurrentTarget
<RadarChart
  axes={['Perceivable', 'Operable', 'Understandable', 'Robust']}
  series={[
    { name: 'Current', data: [80, 65, 90, 70], color: 'var(--demo-accent)' },
    { name: 'Target', data: [100, 100, 100, 100], color: 'var(--demo-good)' },
  ]}
  max={100}
  title="Current vs target"
/>
  • A role="figure" named by the visible title and described by a generated summary (chart type, series and point counts, range).
  • The SVG is a role="group" with aria-roledescription="chart"; no graphics-* roles.
  • Each series is a role="group"; each point is labelled {series}, {axis}: {value}, 2 of 5. With onSelect, selectedIndex or a click handler, marks are role="button" with aria-pressed; otherwise they’re static role="img".
  • Points use a different marker shape per series, and lines a different dash pattern in forced-colours mode.
  • A visible Show data table button (aria-expanded) reveals a real table captioned Data for {title}, with th scope headers and values run through formatValue.
  • Escape (inside the chart only) clears the selection and announces it in a polite live region; it doesn’t close a surrounding dialog.
  • Animations stop under prefers-reduced-motion. In forced-colours mode marks use system colours, told apart by dash pattern and marker shape.
Key Action
← / → Previous / next axis (wraps)
Home / End First / last axis
↑ / ↓ Previous / next series
Tab Leave the chart
Enter / Space Toggle selection (interactive marks)
Escape Hide the tooltip and clear selection

See the Accessibility guide for the shared structure, the labels prop and screen-reader testing.

PropTypeDefaultDescription
axesstring[]—Required. Axis names.
seriesRadarSeries[]—

Required. { name, data, color? }.

maxnumberdata maxValue at the rim.
levelsnumber4Grid rings.
sizenumber—Fixed diameter in px. Omit to fill the container’s width (square).
formatValue(value: number) => stringIntl.NumberFormat

Formats values in ticks, marks and the table. Defaults to Intl.NumberFormat(labels.locale).

onPointClick(series, axis, value) => void—Makes points buttons.
selectedIndex{ series, point } | null—Controlled selection.
onSelect(index | null) => void—Makes points buttons.
titlestring—Required. Visible title: names the figure and captions the data table.
hideTitlebooleanfalseHide the title visually. It still names the chart for assistive technology.
labelsPartial<ChartLabels>English

Generated strings and the number locale. See Accessibility.

dataTable“disclosure” | “visually-hidden”“disclosure”How the data table is offered.
exportRefRef<ChartExportHandle>—

SVG/PNG export. See Exporting charts.

classNamestring—Class on the figure.