Radial Chart
Show completion and capacity with concentric rings, gauges and stacked arcs.
Loading chart…
| Stage | Complete (%) |
|---|---|
| Design | 92 |
| Build | 76 |
| Review | 58 |
Activity rings
ActivityRings supplies context, axes, tracks, tooltip and a static legend for progress data. Give each ring a config key, original value and optional domain. Name the chart with aria-label or aria-labelledby.
Loading chart…
| Activity | Original value |
|---|---|
| move | 350 |
| exercise | 30 |
| stand | 9 |
Values normalize to 0–100 for geometry; finite out-of-domain values clamp visually. The default tooltip keeps original values and config formatters. Custom native payloads expose rawValue and progress; native sector value is normalized. Ring order follows the array, inner to outer.
The default is responsive width, 300px height, a clockwise full sweep, rounded tracks, static legend, labels off and motion off. Do not wrap this helper in another Root. Use explicit composition below for custom axes/data, children or inter-chart choreography.
Usage
Root supplies metadata; RadialBarChart owns motion. Native polar axes map values and categories to angles and rings.
<Chart.Root config={config}>
<Chart.ResponsiveContainer width="100%" height={280}>
<Chart.RadialBarChart data={data} categoryKey="period" animate startAngle={90} endAngle={-270} innerRadius="18%" outerRadius="94%">
<Chart.PolarAngleAxis type="number" domain={[0, 100]} tick={false} />
<Chart.PolarRadiusAxis type="category" dataKey="period" tick={false} axisLine={false} />
<Chart.RadialBarSeries dataKey="progress" background={{ fill: "#e9e5f1" }}>
<Chart.LabelList fill="white" dataKey="label" content={<Chart.RadialBarLabel />} />
</Chart.RadialBarSeries>
<Chart.Tooltip itemKey={(entry) => String(entry.payload?.period ?? entry.name)} />
</Chart.RadialBarChart>
</Chart.ResponsiveContainer>
</Chart.Root>Each category resolves its config color through categoryKey. Values still come from the progress series; tooltip identity uses the category field too. Arc labels hide when they cannot fit.
Capacity gauge
Compose a gauge with RadialBarChart; there is no Gauge export. [0, 100] and angles 180 to 0 produce a semicircle; native Label supplies the center summary.
Loading chart…
| Resource | Used (GB) |
|---|---|
| Storage | 72 |
Choose the entrance sweep beside Preview/Code. The example remounts to replay it; final angles, domain and track stay fixed.
Stacked capacity
Matching stackId values share one ring. Committed and reserved total 86 of 100 hours. Legend toggles recalculate the stack while preserving the fixed domain.
Loading chart…
| Month | Committed hours | Reserved hours |
|---|---|---|
| October | 64 | 22 |
API reference
Focused props for explicit polar composition. Data, tracks and custom center labels remain consumer-owned.
ActivityRings
| Prop | Type | Default | Description |
|---|---|---|---|
rings | readonly ActivityRing[] | Required | { key: string; value: number; domain?: readonly [number, number]; cellProps?: ComponentProps<typeof Cell> }; unique keys must exist in config. Empty arrays are valid. |
config | SeriesConfig | Required | Labels, colors, icons and original-value formatters. |
aria-label / aria-labelledby | string | One required | Names the chart; original-value descriptions are supplied automatically. |
domain | readonly [number, number] | [0, 100] | Default finite increasing bounds; ring-specific domains override it. |
responsive / height | boolean / number | percentage | true / 300 | Native responsive chart sizing; width defaults to 100%. |
animate | boolean | RadialBarAnimation | false | Same entrance options as RadialBarChart; respects reduced motion. |
series | Native RadialBarSeries options | Tracks and rounded ends | Override series paint, background or geometry; explicit fill wins over config. |
labels | false | LabelList options | false | Optional arc labels; custom content retains control. |
legend / tooltip | false or component options | Static legend / original-value tooltip | Disable either independently or supply custom rendering options. |
Native chart props override center, radii, angles, gaps and motion. Ring cellProps retains paint/handlers and wins over series fill. Custom paint may differ from legend metadata; update config or supply custom/disabled legend content.
RadialBarChart
| Prop | Type | Default | Description |
|---|---|---|---|
data | Row[] | — | Categories and numeric values; each row can create a separate ring. |
categoryKey | string | ((row: Row) => string) | Off | Resolves chart rows into config keys for default category paint. |
animate | boolean | RadialBarAnimation | false | Chart-owned entrance; respects reduced motion. Options include revealDurationMs and revealEasing. |
animationDirection | "clockwise" | "anticlockwise" | "clockwise" | Entrance direction only; preserves final native geometry. |
startAngle / endAngle | number | 0 / 360 in Recharts | Native angular extent in degrees. Examples explicitly set both. |
innerRadius / outerRadius | number | string | "0%" / "80%" in Recharts | Pixels or percentages of the native maximum radius. |
cx / cy | number | string | "50%" | Native center position; the gauge lowers cy for its semicircle. |
barCategoryGap | number | string | "10%" in Recharts | Space between category bands. |
aria-label | string | — | Accessible plot name; include a separate data alternative. |
Changing direction after reveal does not replay it. Custom sectors or transformed marks bypass directional reveal. Reduced motion shows final geometry.
RadialBarSeries
| Prop | Type | Default | Description |
|---|---|---|---|
dataKey | string | number | ((row: Row) => unknown) | Required | Value field or accessor. |
seriesKey | string | String dataKey | Config and visibility identity; needed for controlled accessor keys. |
background | boolean | object | ReactElement | function | false | true supplies a pale Kind track using --kind-ui-radial-track, fallback #f1f1f1; explicit background props/renderers own the track. |
stackId | string | number | — | Matching IDs stack series in one category band. |
cornerRadius | number | string | 0 in Recharts | Native rounded sector corners. |
material | "plain" | "paper" | "clay" | "glow" | "plain" | Native mark finish; custom shapes, active shapes and filters retain rendering ownership. |
fill | string | Config color | Series paint; native Cells can override individual rows. |
hide | boolean | false | Explicit hiding; Root visibility also applies. |
Per-series animation is disabled. These examples use plain paint without automatic radial inspection emphasis. See Recharts RadialBar.
RadialBarLabel
Use as LabelList content for sector-aware arc text. Center summaries use native Label.
| Prop | Type | Default | Description |
|---|---|---|---|
show | boolean | true | Independently hides visual text. |
fontSize | number | 11 | Requested SVG pixel size, reduced to fit the ring band. |
minFontSize | number | 9 | Minimum fit size; unfitting measured glyph bounds hide the text. |
padding | number | 2 | Space at arc endpoints and band edges. |
fill | string | "white" | Text paint. |
formatter | Native label formatter | — | Formats the value provided by LabelList. |
Shared components
Root, SeriesConfig, Axes and grid, Labels and cells, Legend, Tooltip, ResponsiveContainer.