Skip to content
InsightCharts

Search

Search guides and components

Orbit chart

Places items as dots on concentric rings round a centre, one ring per category, level or period, with a key that explains rings, angle and dot area.

Use when
A designed alternative to a table for 6 to about 40 named things grouped by distance, level or era from one centre: suppliers by tier, moons by planet-distance band, releases by decade, stakeholders by closeness. One item can be highlighted.
Avoid when
A numeric distance that must be read exactly (use strip plot or scatter chart); comparison of the dot values (use bar chart); more than about 6 rings or 40 items (use data table); hierarchy with sizes that add up (use treemap or circle pack).

Preview

Composition

Used in

1 infographic uses orbit chart.

Infographics

1

A poster with one subject in the middle of the sheet: a wheel of spokes round an icon (radial-spokes), two to four large figures standing either side of it, and a bottom row with the same subject's surroundings on concentric rings (orbit-chart) and a ranking as centred pills (pill-rank).

Installation

$ pnpm dlx shadcn@latest add @insightcharts/orbit-chart

The CLI copies the source into your project and needs the @insightcharts registry in components.json; see installation. With the package, import it by name:

import { OrbitChart } from "insightcharts";

Examples

Angle from the data, equal dots, click to select

Stress: 5 rings, 34 items, long names

Props

PropTypeDefaultDescription
namerequiredstringName field: one dot per row.
ringrequiredstringField naming the ring each dot sits on: a category, level or period.
ringsstring[]Ring order from the centre outward. Default: first appearance in the data.
valuestringValue field: dot area. Without it every dot is the same size.
anglestringNumeric field that sets the angle round the ring. Without it dots are spaced evenly.
angleDomain[number, number][0, 360]Values of angle that map to a full turn, clockwise from 12 o'clock.
ringLabelstringWhat the rings mean, for the key. Default: the ring field name.
angleLabelstringWhat the angle means, for the key, e.g. "Clockwise from the top: month of launch".
sizeLabelstringWhat dot area means, for the key. Default: the value field name.
iconstringIcon in the centre disc: a built-in name or path://.
centerLabelstringShort text in the centre disc, used when there is no icon.
colorBy"ring" | "single""ring"A colour per ring, or the accent for every dot.
showKeybooleantrueShow the key that explains rings, angle and dot area.
Common chart props 29

Every chart built with defineChart accepts these on top of its own props.

PropTypeDescription
dataDataInputRows, CSV text, a URL, { url, path }, an async function, or an Arrow-style table. Omit inside <InsightData>.
transformTransform | Transform[]A pipeline of transforms applied before drawing.
titlestringThe title. One plain statement of what the data shows, with the number and the period ("Monthly churn fell from 4.2% to 2.1% in 2024"), or a plain label ("Monthly churn, 2024"). One clause, no figures of speech.
subtitlestringMeasure, unit, population, period.
sourcestringData source, shown as "Source: ...".
notestringMethod notes or caveats.
heightnumber | stringCSS height of the plot. Default 360.
aspectnumberWidth / height. Overrides height.
highlightstring | string[]The entity (or entities) the title is about. Every other series is drawn in grey.
annotationsAnnotation[]Reference lines, shaded bands and callouts, in data coordinates.
formatFormatSpecHow to print values: "compact", "percent", "currency:USD", "{value} kg", Intl options, or a function.
legendbooleanShow the legend. Default: shown when there are two or more series.
selectboolean | stringMake marks clickable to filter. Inside <InsightData> the selection filters every other chart. Pass a field name, or true to use the chart's category field.
onSelect(values: string[], field: string) => voidCalled with the selected values whenever the selection changes.
optionEChartsOption | ((option: EChartsOption, ctx: BuildContext) => EChartsOption)Deep-merged over the generated ECharts option, or a function that receives and returns it. Use it for ECharts settings no prop covers.
themeThemeInputA theme, or a partial set of tokens merged over the surrounding theme, for this chart only.
modeModeInput"auto" (default) follows the page, "system" follows the OS, or force "light" / "dark".
rendererRendererInput"auto" (default) uses SVG for light charts and canvas for heavy ones.
animatebooleanSet false to disable animation. Reduced-motion preferences are always respected.
lazybooleanMount the chart only when it scrolls near the viewport. Default true.
groupstringLink tooltips with other charts sharing this group id.
exportableboolean | ExportFormat[]Show an export menu: true or a list of formats from png, jpeg, svg, pdf, csv, json.
tablebooleanShow a collapsible "View data" table under the chart.
altstringAccessible description: the chart type and measures, then the main pattern and the notable values.
idstringStable id for this chart's selection in the shared store.
onEventsRecord<string, ChartEventHandler>ECharts event handlers, e.g. { click: (params, chart) => {} }. Prefix a name with zr: to bind to the canvas itself.
onReady(chart: EChartsInstance) => voidCalled with the ECharts instance once it is created.
classNamestringClass name for the outer <figure>.
styleCSSPropertiesInline style for the outer <figure>.