Components

Scatter and Bubble Chart

Compare numeric relationships across series and encode a third measure with bubble area.

Loading chart…

Task latency and acceptance by cohort
TaskCohortLatency (ms)Acceptance (%)
Search (weekday)weekday2884
Draft (weekday)weekday5292
Summarize (weekday)weekday4189
Translate (weekday)weekday6595
Search (weekend)weekend3580
Draft (weekend)weekend6188
Summarize (weekend)weekend4786
Translate (weekend)weekend7693

Usage

Supply records to each ScatterSeries and numeric keys to the X and Y axes.

Composition
<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, acceptance and request volume
TaskLatency (ms)Acceptance (%)Requests (k; blank means missing)
Search2884260
Draft5292180
Summarize4189120
Translate659575
Classify19810
Extract7388

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, acceptance and request volume
TaskLatency (ms)Acceptance (%)Requests (k; blank means missing)
Search2884260
Draft5292180
Summarize4189120
Translate659575
Classify19810
Extract7388

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

PropTypeDefaultDescription
animateboolean | ScatterAnimationfalseIn-place entrance fade and shared tooltip motion; respects reduced motion.
accessibilityLayerbooleantrue in RechartsNative first-series keyboard inspection; set explicitly here.
margin{ top?: number; right?: number; bottom?: number; left?: number }5 eachPlot spacing for axes and marks.
childrenReactNode—Explicit axes, grid, series and Scatter tooltip.
aria-label / aria-labelledbystring—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

PropTypeDefaultDescription
dataRow[]—Native point records; axis keys read these records.
seriesKeystringString dataKeyConfig 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.
fillstringConfig color when identifiedExplicit color overrides metadata.
hidebooleanfalseNative hiding; Root selection also applies.
xAxisId / yAxisId / zAxisIdstring | number0Native 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

PropTypeDefaultDescription
pointLabel(record: Row) => ReactNodeConfig series labelReceives the actual selected native record.
zDimensionScatterSizeDimension<Row>—Explicit raw zero/missing size recovery; no geometry change.
missingValueReactNode"No data"Text for a recovered missing measurement.
axisIdstring | number0Match a custom X axis ID for native keyboard navigation.
maxWidthnumber180Kind tooltip width bound in pixels.
contentReactElement | ((props: TooltipRenderProps) => ReactNode)Kind Scatter contentCustom 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.

ScatterTooltipContent

PropTypeDefaultDescription
tooltipTooltipRenderPropsRequiredNative tooltip content callback payload.
pointLabel / zDimension / missingValueSame as ScatterTooltipSameCompose Kind dimension content inside a custom native adapter.
valueAnimation"shuffle"—Optional numeric readout motion.

Shared components

Root, SeriesConfig, Axes and grid, Legend, ResponsiveContainer.