Scatter and Bubble Chart
Compare numeric relationships across series and encode a third measure with bubble area.
Loading chart…
| Task | Cohort | Latency (ms) | Acceptance (%) |
|---|---|---|---|
| Search (weekday) | weekday | 28 | 84 |
| Draft (weekday) | weekday | 52 | 92 |
| Summarize (weekday) | weekday | 41 | 89 |
| Translate (weekday) | weekday | 65 | 95 |
| Search (weekend) | weekend | 35 | 80 |
| Draft (weekend) | weekend | 61 | 88 |
| Summarize (weekend) | weekend | 47 | 86 |
| Translate (weekend) | weekend | 76 | 93 |
Usage
Supply records to each ScatterSeries and numeric keys to the X and Y axes.
<Chart.Root config={config} visibleSeries={visibleSeries} onVisibleSeriesChange={setVisibleSeries}>
<Chart.Legend />
<Chart.ResponsiveContainer width="100%" height={280}>
<Chart.ScatterChart animate accessibilityLayer aria-label="Latency and acceptance by cohort">
<Chart.CartesianGrid />
<Chart.XAxis type="number" dataKey="latency" name="Latency" unit=" ms" />
<Chart.YAxis type="number" dataKey="acceptance" name="Acceptance" unit="%" />
<Chart.ScatterSeries seriesKey="weekday" data={data.filter((row) => row.cohort === "weekday")} shape="circle" />
<Chart.ScatterSeries seriesKey="weekend" data={data.filter((row) => row.cohort === "weekend")} shape="diamond" />
<Chart.ScatterTooltip<(typeof data)[number]> pointLabel={(row) => row.period} />
</Chart.ScatterChart>
</Chart.ResponsiveContainer>
</Chart.Root>Series keys identify legend entries; X/Y keys identify dimensions. Reuse each symbol in legendShape and series shape; legend toggles use consumer-owned visibility.
Bubble size
Add ZAxis to compose bubbles; there is no BubbleChart export. Its domain and range map request volume to symbol area.
Loading chart…
| Task | Latency (ms) | Acceptance (%) | Requests (k; blank means missing) |
|---|---|---|---|
| Search | 28 | 84 | 260 |
| Draft | 52 | 92 | 180 |
| Summarize | 41 | 89 | 120 |
| Translate | 65 | 95 | 75 |
| Classify | 19 | 81 | 0 |
| Extract | 73 | 88 |
Native Z scaling uses the minimum area for zero and missing values. zDimension restores their raw tooltip values without changing geometry.
Use top-level keys or a shared accessor for nested Z values. Validate negative count inputs before scaling; Kind retains native size behavior.
Materials
Choose plain, paper, clay or glow.
Loading chart…
| Task | Latency (ms) | Acceptance (%) | Requests (k; blank means missing) |
|---|---|---|---|
| Search | 28 | 84 | 260 |
| Draft | 52 | 92 | 180 |
| Summarize | 41 | 89 | 120 |
| Translate | 65 | 95 | 75 |
| Classify | 19 | 81 | 0 |
| Extract | 73 | 88 |
Finishes preserve symbol paths and Z area; glow is decorative. Custom shapes, point filters or clip paths bypass the finish. Small marks may make finishes indistinguishable.
Interaction and accessibility
Pointer inspection selects visible point records. Left/Right visits the first registered series in data order, not spatial order or every series. Escape dismisses inspection.
Motion fades marks in place. Interaction or data/visibility/geometry changes finish entrance; reduced motion disables it. Remount to replay.
API reference
Focused props for explicit numeric composition; Recharts owns scales, symbols and point selection.
ScatterChart
| Prop | Type | Default | Description |
|---|---|---|---|
animate | boolean | ScatterAnimation | false | In-place entrance fade and shared tooltip motion; respects reduced motion. |
accessibilityLayer | boolean | true in Recharts | Native first-series keyboard inspection; set explicitly here. |
margin | { top?: number; right?: number; bottom?: number; left?: number } | 5 each | Plot spacing for axes and marks. |
children | ReactNode | — | Explicit axes, grid, series and Scatter tooltip. |
aria-label / aria-labelledby | string | — | Accessible plot name. |
No configured Line shortcuts. See Recharts ScatterChart.
At the pinned peer version, fixed-size server rendering produces no Scatter SVG marks. Supply server-rendered data or a summary.
ScatterSeries
| Prop | Type | Default | Description |
|---|---|---|---|
data | Row[] | — | Native point records; axis keys read these records. |
seriesKey | string | String dataKey | Config and visibility identity; use explicitly for cohorts. |
shape | "circle" | "cross" | "diamond" | "square" | "star" | "triangle" | "wye" or native custom shape | "circle" | Built-in symbol or consumer-owned renderer. |
material | "plain" | "paper" | "clay" | "glow" | "plain" | Finish for built-in symbols, preserving native geometry. |
fill | string | Config color when identified | Explicit color overrides metadata. |
hide | boolean | false | Native hiding; Root selection also applies. |
xAxisId / yAxisId / zAxisId | string | number | 0 | Native axis association. |
Native per-series animation is disabled. Kind does not coerce or deduplicate coordinates; Cells, labels, events and custom shapes remain available. See Recharts Scatter.
ScatterTooltip
| Prop | Type | Default | Description |
|---|---|---|---|
pointLabel | (record: Row) => ReactNode | Config series label | Receives the actual selected native record. |
zDimension | ScatterSizeDimension<Row> | — | Explicit raw zero/missing size recovery; no geometry change. |
missingValue | ReactNode | "No data" | Text for a recovered missing measurement. |
axisId | string | number | 0 | Match a custom X axis ID for native keyboard navigation. |
maxWidth | number | 180 | Kind tooltip width bound in pixels. |
content | ReactElement | ((props: TooltipRenderProps) => ReactNode) | Kind Scatter content | Custom content owns dimension rendering. |
zDimension accepts a string key or numeric/missing-value accessor, plus optional name and unit. Native formatters take precedence. See Recharts Tooltip.
Preserve accessible data for every series, including overlapping observations and missing measurements.
ScatterTooltip Content
| Prop | Type | Default | Description |
|---|---|---|---|
tooltip | TooltipRenderProps | Required | Native tooltip content callback payload. |
pointLabel / zDimension / missingValue | Same as ScatterTooltip | Same | Compose Kind dimension content inside a custom native adapter. |
valueAnimation | "shuffle" | — | Optional numeric readout motion. |
Shared components
Root, SeriesConfig, Axes and grid, Legend, ResponsiveContainer.