Skip to content

Radar metric axes and grid

radarLine and radarArea share configurable metric axes in standalone Charts and Pivot. A dataset category is one metric/spoke; dataset series are the profiles compared on those metrics. Category IDs identify overrides independently of source-array order and displayed labels.

const dataset = createChartDataset(rows, mapping);
const latencyId = dataset.categories[0].id;
const chart = await createChart({
container,
chartType: 'radarArea',
dataset,
chartOptions: {
radarDomain: 'metric',
radarDivisions: 5,
radarGridShape: 'polygon',
radarReverse: true,
radarValues: true,
startAngle: 0,
},
axes: { radar: {
value: { min: 0, max: 100, tickCount: 5 },
metrics: {
[latencyId]: { min: 1, max: 1000, scale: 'log', reverse: true,
title: 'Latency', unit: 'ms', tickValues: [1, 10, 100, 1000] },
},
stripeColors: ['#f3f4f6', '#ffffff'],
labelOrientation: 'radial',
} },
});
chartOptions fieldOmitted/editor defaultAccepted values and meaning
radarDomain'shared''shared' infers a common domain across displayed metrics/profiles; 'metric' infers each metric’s domain from its displayed profile values. Authored common/metric bounds take precedence.
radarDivisions4Integer 1–20; normalized radial grid bands.
radarGridShape'circular''circular' or 'polygon'; polygon corners follow metric directions.
radarReversefalseCounterclockwise projection when true, retaining canonical category order.
radarValuesfalseNumeric tick marks and formatted values on the metric spokes.
startAngle-90Integer -360–360 degrees; zero points right, -90 points up.

These controls appear in Pivot Customize → Appearance. Their normal reset controls remove authored values. startAngle is also used by pie charts, with each chart family’s own defaults.

FieldDefault and contract
valueOptional ChartRadarValueAxis defaults inherited by every metric.
metricsOptional record of category ID → ChartRadarValueAxis. Up to 1,000 nonempty IDs of at most 32,768 characters. Unknown/not-yet-loaded category IDs remain dormant.
gridColorResolved theme grid color; validated chart color for ring/spoke defaults.
stripeColorsEmpty by default; up to 32 validated colors repeated over grid bands, from the center outward. These are static saved colors.
showRingstrue; hides ring outlines when false. Authored stripe fills remain.
showSpokestrue; hides metric spoke lines when false. Numeric ticks remain independently controlled by radarValues.
showLabelstrue; shows category/metric labels independently of numeric values.
labelOffset14 SVG pixels beyond the fitted radius; accepts finite 0–100.
labelOrientation'horizontal', 'radial' or 'tangential'; horizontal by default. Rotated labels flip on the left side to remain upright.

ChartRadarValueAxis reuses the numeric-axis contract, excluding Cartesian position. Its fields are:

  • scale: 'linear', 'log', 'symlog' or 'sqrt' (linear by default).
  • constant: positive finite symlog transition constant; default 1.
  • min, max: finite raw bounds, increasing when both are authored. Log bounds and every displayed log observation must be positive.
  • reverse: reverses the metric’s radial projection while semantic bounds remain increasing. It is separate from radarReverse, which reverses metric angles.
  • title, titleColor: override the metric category label and its color.
  • unit, tickFormat: shared numeric tick formatting. tickFormat accepts notation (standard, compact, scientific) and minimum/maximum fraction digits under the ordinary numeric-axis bounds.
  • tickCount, tickValues, tickMinStep, tickMaxStep, tickSpacing: ordinary bounded numeric tick policies, including exact raw positions and pixel spacing. tickCount is an integer from 2 to 1,000; exact values are unique finite numbers with at most 1,000 entries. Step/spacing values are positive and finite.
  • lineColor, labelColor: metric spoke/tick color and numeric value-label color. Renderer label/element customizations retain their normal precedence.

Metric fields override common fields individually. A metric that explicitly changes scale away from symlog drops the inherited symlog constant. Other inherited fields remain active: for example, a log metric inheriting a common zero minimum needs its own positive minimum. Combined inherited domains and scale/constant settings must remain valid. Clearing a metric field resumes its common default; clearing a common field resumes automatic inference.

With every new radar option and axes.radar omitted, the old global positive maximum, four circular rings and original markup/geometry remain. Legacy radar inputs still reject negative values and omit zero-value markers.

An explicit axes.radar (including {}), or any authored radar option from the table above, enables the configurable-axis path. It accepts finite zero/signed values for linear/symlog/sqrt scales. Automatic linear-family domains include zero and the displayed raw extrema; shared mode uses all displayed metrics and metric mode uses only that metric. Degenerate/empty domains expand through the shared numeric-domain owner. Explicit bounds retain authority, and extreme finite domains use the shared overflow-safe coordinate transform.

Values outside authored domains are projected onto the nearest radial boundary. This changes geometry, never raw data, counts, source IDs or activation values. Nulls remain center corners in the polygon and do not create markers, labels or click/drill records. Subtotals/grand totals do not become metric spokes or affect domains. Hidden profile measures do not contribute to domain inference.

Grid bands represent equal fractions of transformed radial distance. They are not fixed raw-value intervals when axes have different domains or nonlinear scales. Numeric ticks use each metric’s own transform, unit and formatting. Center value labels are omitted to avoid overlapping labels at the common origin. Category labels and numeric labels retain normal layout/density limits; many metrics/ticks can still require application-level simplification.

unit formats axis values. Tooltips, data labels and CSV retain the dataset’s ordinary raw/formatted source values; use the existing formatter APIs when different source display text is required. Numeric label customization contexts use axisId: 'radar' and the metric category descriptor, with no Cartesian physical-axis orientation. Rotation and domain reversal do not reorder keyboard targets or fabricate records.

All settings persist in models and work with SVG server rendering, in-place hydration, normal resize, saved restoration and SVG/image/PDF export. Invalid fields or incompatible inherited axes reject atomically. Inference describes the committed displayed dataset; it does not infer global statistics from unrequested provider rows. Ordinary minimum category requirements remain in force.

In Customize → Axes and scales, enable Configure radar axes. Choose Common metric defaults or one Radar metric, then use the shared scale, minimum/maximum, reversal, unit, title and tick controls. Metric values inherit common defaults. Cartesian position controls are omitted. Reset radar axes removes axes.radar; appearance options reset separately. Signed data still needs an explicit configurable-axis setting, so removing its last opt-in can reject until the data/configuration is compatible.

The gallery enables axes.radar: {} when selecting a radar for signed data. Switching between radar line/area retains axes; unrelated chart types prune radar-specific axes/options. The adapter shares the Charts renderer and optimistic axis editor, with no Pivot-specific geometry implementation.

Public aliases are PivotChartRadarAxes and PivotChartRadarValueAxis. Appearance fields use ordinary chartOptions.<field> policy IDs. Axis policies include axes.radar.enabled, axes.radar, axes.radar.metricSelector, axes.radar.value.*, axes.radar.metric.* and axes.radar.reset. Localize captions with localeText.chartOptions.radarAxes, radarEnable, radarCommon, radarMetric, radarReset, and the normal option labels/descriptions. selectValues['radarDomain.shared'] supplies the scoped shared-domain caption; field-specific select captions take precedence over generic value captions.

This adds radar metric axes and grid authoring. General polar/radial-bar axis collections, angular/radial brushing and zoom, radar area/axis hover modes, striping callbacks and animation remain separate capabilities. The official MUI radar reference describes the related metric-domain and grid controls; the contracts above belong to this shared engine.