Skip to content
Charts

Scatter Chart

Two-axis scatter. Default and Motion variants.

Examples

Installation

Default is a ready-made wrapper from the registry. Motion is the composable engine at @cronus-ui/ui/charts (peer visx + motion).

bash
npx cronus-ui add scatter-chart
tsx
import { ScatterChart } from "@cronus-ui/ui";

Usage

tsx
import { ScatterChart, Scatter, Grid, XAxis, YAxis, ChartTooltip } from "@cronus-ui/ui/charts";
<ScatterChart data={data}>
<Grid horizontal vertical />
<Scatter dataKey="alpha" />
<Scatter dataKey="beta" />
<XAxis />
<YAxis />
<ChartTooltip />
</ScatterChart>

Components

Motion API — compose these under the chart root. Default wrapper props are in Default API below.

ScatterChart

Root that sizes the SVG, provides scales, and hosts series children.

Skip ScatterChartProps props table
PropTypeDefaultDescription
data*
Record<string, unknown>[]Rows with a date (or x) field and numeric series.
xDataKey
string"date"Key for the x-axis.
margin
`Partial<{ top, right, bottom, left }>`{ top: 40, right: 40, bottom: 40, left: 40 }Plot margins.
animationDuration
number1100Clip-reveal duration in ms.
aspectRatio
string"2 / 1"CSS aspect ratio.
status
"loading" | "ready""ready"Loading ↔ ready choreography.
xDomain
[Date, Date]Visible x-range for brush zoom.
className
stringContainer class.

Scatter

One series of points. Optional y-gradient, hover fade, ring style.

Skip ScatterProps props table
PropTypeDefaultDescription
dataKey*
stringY-value key.
fill
stringPoint fill. Defaults to --chart-1…5 by series order.
radius
number5Point radius.
yGradient
boolean | { from, to }Color by vertical position.
fadeOnHover
booleantrueDim inactive points.

Grid

Plot-area grid lines. Horizontal by default; optional shimmer while loading.

Skip GridProps props table
PropTypeDefaultDescription
horizontal
booleantrueShow horizontal lines.
vertical
booleanfalseShow vertical lines.
numTicksRows
number5Horizontal line count.
numTicksColumns
number10Vertical line count.
stroke
stringvar(--chart-grid)Line color while ready.
strokeDasharray
string"4,4"Dash pattern.
shimmer
booleanfalseAnimate a band across horizontal lines.
highlightRowValues
number[]Rows drawn with alternate styling (e.g. zero).

XAxis

Time-axis labels that fade when the crosshair passes.

Skip XAxisProps props table
PropTypeDefaultDescription
numTicks
number5Tick labels to show, including first and last.
tickerHalfWidth
number50Fade radius around the date pill.
tickMode
"data" | "domain""data"`data` snaps labels to rows (crosshair-aligned). `domain` spaces ticks evenly.

YAxis

Value labels on the left or right. Pair `yAxisId` with series for dual axes.

Skip YAxisProps props table
PropTypeDefaultDescription
yAxisId
string | number"left"Scale group id.
orientation
"left" | "right""left"Which side to render.
numTicks
number5Approximate tick count.
formatLargeNumbers
booleantrueFormat 1000 as "1k".
formatValue
(value: number) => stringCustom tick formatter. Overrides formatLargeNumbers.

ChartTooltip

Motion tooltip: crosshair, series dots, floating panel, optional date pill. This is not the recharts ChartTooltip from `@cronus-ui/ui`.

Skip ChartTooltipProps props table
PropTypeDefaultDescription
showDatePill
booleantrueAnimated date ticker on the x-axis.
showCrosshair
booleantrueVertical crosshair.
showDots
booleantrueDots on series at the hovered x.
dotVariant
"dot" | "ring""dot"Filled circle or ring.
indicatorColor
string | (point) => stringCrosshair and dot color.
indicatorDasharray
stringDash pattern for the crosshair.
indicatorFadeEdges
"both" | "top" | "bottom" | "none""both"Vertical crosshair fade.
matchCrosshair
booleanfalsePanel uses the crosshair spring when true.
damping
number20Panel follow when matchCrosshair is false. 0 = instant.
content
(props) => ReactNodeCustom tooltip renderer.
rows
(point) => TooltipRow[]Custom row generator.

Y gradient

yGradient colors each dot by its vertical position. Default stops are danger (low) → success (high).

tsx
<Scatter dataKey="score" yGradient />
<Scatter dataKey="score" yGradient={{ from: "var(--cronus-danger)", to: "var(--cronus-success)" }} />

Data format

ts
const data = [
{ date: new Date("2025-01-01"), alpha: 12, beta: 18 },
{ date: new Date("2025-02-01"), alpha: 19, beta: 14 },
];

Theming

Motion charts read `--chart-*` aliases that map onto Cronus semantic tokens (`--cronus-chart-1`…`--cronus-chart-5`, `--cronus-border`, `--cronus-fg`, surfaces). Override the aliases or the tokens — never palette scales (`bg-zinc-900`). Default wrappers use `ChartConfig` with `var(--cronus-chart-*)` / `var(--cronus-primary)`.

Full token reference: Theming.

Dependencies

Default needs the recharts peer. Motion needs visx (and sometimes d3) as optional peers — install only what this chart uses.

bash
bun add recharts
bash
bun add @visx/curve @visx/responsive @visx/scale @visx/shape motion react-use-measure

Default API

Generated from the Default wrapper's exported types. Motion subcomponents are documented above.

ScatterChartProps

Extends HTMLAttributes<HTMLDivElement>

Skip ScatterChartProps props table
PropTypeDefaultDescription
xKey
string"x"
yKey
string"y"
series*
ScatterChartSeries[]