Charts - Radar
Multivariate data on radial axes. Each series renders a polygon across shared spoke labels, suitable for comparing profiles and performance across dimensions.
#Usage
import { ChartAnnotation, ChartCanvas, ChartCaption, ChartExportMenu, ChartHover, ChartItem, ChartLegend, ChartRadar, ChartReferenceBand, ChartReferenceLine, ChartStacked, ChartSvg, ChartTitle, ChartTooltip, ChartYAxis } from '@primeui/vue-chart';<ChartSvg>
<ChartRadar :data="data" category-x-field="categoryXField" value-y-field="valueYField" />
</ChartSvg>Radar charts compare profiles across multiple dimensions on radial axes. Each spoke maps a category and each ring marks a value level. Place multiple ChartRadar components as siblings to overlay and compare datasets.
#Basic
Set categoryXField to map spoke labels and valueYField to map the radial value for each axis.
#Multi-Series
Place multiple ChartRadar components as siblings to overlay separate datasets. Each series renders its own polygon. Overlay multiple series to compare profiles side by side.
#Colors
Set color to apply a color to the polygon stroke and its area fill. Supports hex, RGB, and CSS color values.
#Gradient Color
Pass a radial gradient object to color when the fill needs softer emphasis than a solid stroke. Keep the stops controlled so the gradient supports comparison instead of turning the radar into decoration.
#Fill Opacity
Set fillOpacity to control the polygon area fill. 0 draws only the stroke with no fill; 0.2 is the default semi-transparent fill. Higher values create a more solid polygon, which works well when series don't overlap.
#Curve
Set curve="smooth" to use Bezier interpolation between spoke vertices instead of straight polygon edges. Produces a softer shape. Use this when the angular polygon edges feel too harsh.
#Markers
Set showMarkers to display point markers at each spoke vertex. Set markerSize to control the radius. Mixing marker sizes across series creates visual hierarchy without changing stroke weights.
#Custom Markers
Set renderMarker to replace built-in markers with fully custom content. In SVG mode return a VNode centered at the origin; the chart handles translation to each vertex position. In Canvas mode the context is pre-translated to the vertex; draw at origin and return null.
#Line Styling
Set lineStrokeWidth to control polygon stroke thickness. Set lineStyle to dashed or dotted for a preset dash pattern, or use lineDash to define a custom pattern with [dashLength, gapLength] for distinguishing series when color alone is not enough.
#Grid Shape
Set gridShape="circle" on ChartYAxis to render smooth concentric circles instead of the default polygon grid. Circle grids produce a softer appearance. Use this when the polygon grid feels too technical.
#Grid Styling
Grid styling lives on ChartYAxis. Set tickCount to control the number of concentric levels. Visibility follows the same model as cartesian axes: showLine="false" hides the spoke lines, gridLines="false" hides the concentric rings, and showLabels="false" hides the value labels. Use gridColor, gridStrokeWidth, and gridOpacity to adjust the grid line appearance, and set gridStyle to dashed or dotted for non-solid grid lines.
#Stacked
Wrap multiple ChartRadar components inside ChartStacked to render concentric rings instead of overlapping polygons. Each series fills the band above the previous one, useful for showing cumulative contributions rather than direct comparison.
#Declarative
Define data points inline using ChartItem children instead of a data array. Each ChartItem accepts category-x, value-y, and color.
#Title & Caption
Add ChartTitle to display a title above the chart and ChartCaption for a descriptive line beneath it. Both reduce the chart area height together.
For full configuration see Title & Caption.
#Hover
Add ChartHover to apply visual feedback on hover. Set brightness to lighten the hovered series, and set dimOpacity below 1 only when you want the rest to fade. Hovering operates at the dataset level. The entire polygon highlights, not individual vertices. Vertex markers enlarge to markerSize × 1.3 on hover.
For full configuration see Hover.
#Tooltip
Add ChartTooltip to show data details on hover. The tooltip displays the spoke label, value, and series name for the nearest vertex.
For full configuration see Tooltip.
#Legend
Add ChartLegend to display an interactive legend. Each ChartRadar series appears as a separate entry. Click any item to toggle that series.
For full configuration see Legend.
#Axes
Bind per-category radial scales using category on ChartYAxis. Each axis applies to its matching spoke (category) and maintains its own domain, useful when comparing metrics with different ranges within the same radar chart.
#Annotation
Use ChartAnnotation to render custom content overlaid on the chart area. The render callback receives chartArea, center, xScale, yScale, textColor, and ctx (Canvas mode only). Use center to position content at the chart's center. xScale and yScale are null for radar charts. In SVG mode return a VNode. In Canvas mode draw to ctx and return null.
For full configuration see Annotation.
#Reference Bands & Lines
Use ChartReferenceBand to shade a concentric annular zone between two radial values (y1 / y2). Use ChartReferenceLine to draw a dashed ring at a specific value (y). Both components work on radar with the same props as on cartesian charts. The values are mapped to the same scale as the chart data.
For full configuration see Reference Band and Reference Line.
#Animation
Pass the chart-root animation prop (<ChartSvg> / <ChartCanvas>) to control entrance and update transitions. Spoke points expand outward from the center on entrance and interpolate to new positions on data updates.
For full configuration see Animation.
#Export
Add ChartExportMenu to let users download the chart as PNG, SVG, or PDF.
See Export for format options and programmatic export.
#Responsive
See Responsive for container sizing, aspect ratio, and breakpoint configuration.
#Accessibility
See Accessibility for ARIA labels, keyboard navigation, and screen reader support.
#API
#ChartRadar
Visual styling props with type accessor → R accept a static value, a per-vertex array, a field name (keyof T), or a callback (ctx: ItemContext<T>) => R | undefined. Color-family arrays cycle modulo length; other accessor arrays clip and fall back to the series default.
| Prop | Type | Default | Description |
|---|---|---|---|
data | T[] | - | Data array. Mutually exclusive with ChartItem children |
categoryXField | accessor → string | 'category' | Spoke label field |
valueYField | accessor → number | 'value' | Radial value field |
color | FillValue | default palette | Polygon stroke and fill color (series-level, not a FieldAccessor). A radar polygon is a single closed shape; per-vertex coloring doesn't fit the geometry. For per-vertex marker styling use pointBackgroundColor / pointBorderColor |
name | string | - | Series name, used in legend and tooltip |
keyField | string | - | Field name for stable item identity, used for animation matching when data is reordered |
id | string | auto | Unique dataset identifier |
order | number | auto | Stacking order when inside ChartStacked. 0 = innermost |
fillOpacity | 0–1 | 0.2 | Polygon area fill opacity. 0 = stroke only |
lineStrokeWidth | number | 2 | Polygon stroke thickness (px) |
lineStyle | 'solid' | 'dashed' | 'dotted' | 'solid' | Polygon stroke dash style |
lineDash | number[] | - | Dash pattern for the polygon stroke [dashLength, gapLength] |
curve | 'linear' | 'smooth' | 'linear' | linear = straight polygon edges. smooth = Bezier curves between vertices |
showMarkers | boolean | true | Display point markers at spoke vertices |
markerSize | accessor → number | 4 | Vertex marker radius (px). Per-vertex via array/callback |
markerShape | accessor → string | 'circle' | Built-in enum ('circle' | 'square' | 'triangle' | 'cross' | 'star') or any custom SVG path d string |
pointRotation | accessor → number | 0 | Marker rotation in degrees (0 = upright). Per-vertex via array/callback |
pointBackgroundColor | accessor → FillValue | series color | Marker fill color. Per-vertex via array/callback |
pointBorderColor | accessor → FillValue | - | Marker border stroke color |
pointBorderStrokeWidth | accessor → number | - | Marker border stroke width (px) |
pointBorderDash | accessor → number[] | - | Marker border dash pattern |
pointBorderDashOffset | accessor → number | 0 | Marker border dash phase offset |
pointBorderJoinStyle | 'round' | 'bevel' | 'miter' | 'miter' | Marker border path join style |
borderColor | accessor → FillValue | - | Polygon halo border color |
borderStrokeWidth | accessor → number | - | Polygon halo border width (px) |
borderDash | accessor → number[] | - | Polygon halo border dash pattern |
borderDashOffset | accessor → number | 0 | Polygon halo border dash phase offset |
borderJoinStyle | 'round' | 'bevel' | 'miter' | 'round' | Polygon halo border join style |
hoverColor | accessor → FillValue | - | Per-vertex fill color on hover. Short-circuits the global ChartHover.brightness cascade |
hoverBorderColor | accessor → FillValue | - | Per-vertex border color on hover |
yAxisId | string | - | Binds this series to a named ChartYAxis for independent per-series scaling. When omitted, the series contributes to the shared auto-computed domain |
renderMarker | (context: PointRenderContext) => unknown | - | Custom vertex marker renderer. SVG: return a VNode centered at origin. Canvas: draw to ctx and return null |
#ChartYAxis (radial grid)
The concentric grid is configured on ChartYAxis, not on ChartRadar. Add a ChartYAxis to style it. The number of rings follows the axis tickCount.
| Prop | Type | Default | Description |
|---|---|---|---|
gridShape | 'polygon' | 'circle' | 'polygon' | Concentric grid shape: polygon (spider web) or smooth circles |
tickCount | number | auto | Number of concentric grid levels (rings) |
showLine | boolean | true | Show the spoke lines (center to outer) |
gridLines | boolean | true | Show the concentric grid rings |
showLabels | boolean | true | Show the value labels |
gridColor | string | theme | Grid line color |
gridStrokeWidth | number | 0.5 | Grid line thickness (px) |
gridOpacity | 0–1 | 0.6 | Grid line opacity |
gridStyle | 'solid' | 'dashed' | 'dotted' | 'solid' | Grid line dash style |
See Axes for the full axis prop reference.
#ItemContext
Passed to every accessor → R callback. Return undefined to fall back to the series-level default for that vertex.
| Field | Type | Description |
|---|---|---|
datum | T | Original data row |
value | number | null | Resolved radial value |
index | number | Vertex position within the dataset |
seriesIndex | number | Order of this series within the chart |
seriesId | string | Dataset id |
category | string? | Resolved spoke label |
size | number? | Current marker pixel size, populated for marker accessors |
#ChartStacked
Wrap ChartRadar children inside ChartStacked to render concentric rings instead of overlapping polygons.
| Prop | Type | Default | Description |
|---|---|---|---|
gap | number | 0 | Pixel gap between concentric rings |
id | string | auto | Stack group identifier |
#ChartItem
Use ChartItem as children of ChartRadar instead of a data array for inline data definitions.
| Prop | Type | Description |
|---|---|---|
category-x | string | Spoke label |
value-y | number | Radial value |
color | string | Override color for this point |
#PointRenderContext
Passed to the renderMarker callback for each vertex.
| Field | Type | Description |
|---|---|---|
x | number | Pixel X coordinate of the vertex |
y | number | Pixel Y coordinate of the vertex |
index | number | Data index |
value | number | null | Raw data value |
category | string | Spoke label |
data | T | Original data item from the data array |
color | string | Resolved series color |
size | number | Current marker radius in pixels, larger when hovered |
isHovered | boolean | Whether this point is currently hovered |
opacity | number | Computed opacity from hover dim effects (0–1). Apply to the custom marker to respect dimOpacity |
ctx | CanvasRenderingContext2D | undefined | Canvas context, present only in Canvas mode |
drawImage | function | undefined | Draw an image from a URL at a position relative to origin. Handles loading and caching automatically. Canvas mode only |
animate | function | undefined | Register a continuous animation on a numeric property, drives the canvas RAF loop while active. Canvas mode only |