LiveChartSeries draws multiple line series that share an axis, time window, and crosshair.
Pass a SharedValue<SeriesConfig[]>.
Live example:
app/demo/multi-series.tsx
in the example app.Multiple live series with a toggleable legend
series.modify(...) (mutating each entry’s data array and value), or replace the whole array
with series.set(...). Avoid series.value = ....
Series options
EachSeriesConfig supports:
Set
line={{ simplify: 1 }} on LiveChartSeries to denoise every rendered
path by roughly one screen pixel. A series can choose a different tolerance, or
set simplify: 0 to keep its exact point path. The shared axis, scrub values,
and live dots continue to use the original series data.
Dimming replacement data
For a timeframe change, retain the current series while the next range loads, then set one UI-thread opacity multiplier for every plotted series:1, then fade back in after
the plotted series returns to full opacity.
Legend
The legend renders toggle chips by default. Configure it with thelegend prop, and listen for
taps with onSeriesToggle:
Per-series dots
Thedot prop controls the live dots, their pulse, optional static glow,
value lines, and inline labels. Each dot has a crisp contrasting outer ring (in
the chart background color) by default, matching the single-series live dot so
overlapping series stay legible. The soft glow remains opt-in:
LiveChartSeries reference.
Per-series scrub tooltip
LiveChartSeries keeps its historical guide-only scrub by default. Opt into the
Morfi market-detail readout with scrub.seriesTooltip: a dashed vertical guide,
a top-centred bucket range, and one pill plus intersection dot for every visible
series. Close values stack instead of overlapping, wide pills flip to the
guide’s left near the right edge, and hidden legend series are omitted.
This feature is opt-in and backward compatible.
scrub={true},
scrub={{}}, and scrub={{ seriesTooltip: false }} all keep the existing
guide-only multi-series behavior. The existing scrub.tooltip property is
still the master switch; setting it to false also suppresses the per-series
pills.true to customize formatting and appearance:
formatSeriesValue and formatTimeRange run on the UI thread; keep them
worklet-safe, just like the chart’s formatValue and formatTime. Omit
bucketSeconds to infer the range width from the first visible series. The
range end is always clamped to the chart’s current-time anchor, so an
in-progress live bucket never displays a future end time.
Set alwaysShow to keep the value pills at the visible endpoints while the
user is not touching the chart. Idle mode deliberately hides the guide and
time pill; scrubbing restores the full readout.