# Line chart

A React component in [Beamline](https://beamline.io/)'s [Charts & data-vis](https://beamline.io/components/charts) category. Live demo: https://beamline.io/components/line-chart

Values over time as lines: curves, point markers, dashed series for forecasts, reference lines for limits and targets, an optional zero baseline and a range handle; missing values break the line.

## Use it for

- Trends and comparisons between a few series (latency percentiles, actual vs forecast).
- A value against a limit or target (references).

## Not for

- Totals that stack ([area-chart](https://beamline.io/components/area-chart)).
- Categories ([bar-chart](https://beamline.io/components/bar-chart)).
- Tiny inline trends ([sparkline](https://beamline.io/components/sparkline)).

## Anatomy

- title and description (figcaption; can be visually hidden)
- actions slot (range, type)
- legend (toggle buttons)
- table button
- plot (kept left to right in RTL: time runs one way, O1 D2)
- tooltip
- lines
- unmeasured band (hatched, “Not measured”) over a run where no visible series was measured
- point markers
- reference lines with labels (haloed by the card where a line crosses them)
- range handle

## Variants

- **0**: curve: linear · monotone · step · bump · natural
- **1**: dots: none · all · last
- **2**: series dashed (forecast)
- **3**: references (neutral · danger · success)
- **4**: zero baseline
- **5**: brush

## States

- loading (skeleton bars)
- empty (no data for the range)
- missing values: a series with a gap breaks; where no visible series was measured the break is a hatched band that says Not measured; tooltip and table say Not measured
- series hidden from the legend
- table view

## Keyboard

- Tab focuses the plot; ←/→ (or ↑/↓) move the tooltip point by point, including onto unmeasured points; the first press starts at an end; Home/End jump; Escape hides the tooltip
- Legend buttons toggle series (aria-pressed)
- The table button switches to a table of every value and back
- With brush: each end of the range handle is a slider; ←/→ move it one point

## Motion

Lines are revealed left to right once (sweep duration); afterwards a rescaled axis, a hidden series or new data carries the lines to their new heights. Nothing moves under reduced motion.

## Props

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `data / x` | `T[] / keyof T` | — | Rows and the column on the category axis. |
| `series` | `ChartSeries[]` | — | { key, label, color?, format?, dashed? } per plotted column; colours follow the series palette. |
| `title / hideTitle / description` | `string / boolean / ReactNode` | — | The figure's name is always its accessible name. |
| `xFormat / yFormat` | `(v) => string` | — | Tick, tooltip and table formats. |
| `height` | `number` | — |  |
| `grid / legend / table` | `boolean` | — | Default on. |
| `loading` | `boolean` | — |  |
| `actions` | `ReactNode` | — | Controls beside the legend. |
| `className` | `string` | — |  |
| `curve` | `ChartCurve` | — |  |
| `dots` | `"none" \| "all" \| "last"` | — |  |
| `references` | `ChartReference[]` | — | { y, label, tone? } horizontal markers. |
| `zero` | `boolean` | — | Start the value axis at 0. |
| `brush` | `boolean` | — |  |
| `classNames` | `ChartClassNames` | — | Frame, tooltip and slice-list parts as applicable to this chart. |
| `style / ref` | `CSSProperties / Ref<HTMLElement>` | — | The native chart figure; layout measurement refs stay internal. |

## Dependencies

`d3-shape`, `motion`

## Import

```tsx
import { LineChart } from "@/components/line-chart/line-chart";
```

## Get it

Line chart is part of Beamline: 190 React components and screens your coding agent (Claude Code, Codex, Cursor or any MCP client) installs into your app through Beamline's MCP server, as a ready-built package or as plain React source you can change. $49 one payment (regular $200), no subscription, a year of updates, one licence for your whole team. [Get Beamline](https://beamline.io/checkout?pack=complete) · [Connect your agent](https://beamline.io/connect)

## More in Charts & data-vis

- [Activity heatmap](https://beamline.io/components/activity-heatmap): A calendar of daily counts, one cell per day on a sequential ramp: weeks across, weekdays down, month and weekday labels, a legend scale, hatched days…
- [Area chart](https://beamline.io/components/area-chart): Amounts over time as filled areas: overlapping, stacked or as shares of 100%, five fills, two strokes, five curves, a range handle; gaps for missing…
- [Bar chart](https://beamline.io/components/bar-chart): Amounts by category as bars: columns or rows, grouped, stacked or as shares, reference lines, five looks (rounded, cells, trace, isometric, monospace), a…
- [Composed chart](https://beamline.io/components/composed-chart): Different measures on one time axis: bars, lines and areas per series, a left and a right value axis with their own formats, and reference lines.
- [Gauge](https://beamline.io/components/gauge): One value against a known range: a semicircle, a 270° dial or a full ring, filled or with a needle, coloured bands with their names (healthy, busy…
- [Pie chart](https://beamline.io/components/pie-chart): A few shares of a whole as a pie or donut, with spaced slices, percent labels, a centre readout and a list of every slice with value and share; hovering…
- [Radar chart](https://beamline.io/components/radar-chart): A few series compared across the same five to eight dimensions as polygons on a polygon or circle grid; hover or arrow keys pick a dimension and read…
- [Radial chart](https://beamline.io/components/radial-chart): Progress of a few measures toward their targets as concentric rings, full or half circle, with a centre readout and a list of each ring's value, target…
- [Ridgeline](https://beamline.io/components/ridgeline): Distributions per group as overlapping density ridges (response time by region, order size by plan): an overlap control, median and p95 readouts per row…
- [Sankey chart](https://beamline.io/components/sankey-chart): Flows between stages as bands whose width is the amount: sources to pages to outcomes, budgets to teams; hovering or focusing a node lights its flows and…
- [Slope chart](https://beamline.io/components/slope-chart): Change between two points in time per item, by value or by rank: labels on both sides that never collide, rising and falling told by the end marker (▲ ▼)…
- [Sparkline](https://beamline.io/components/sparkline): A compact trend beside its value: point along it or focus it and use ← → to read each point; nulls are gaps. TrendLine is the bare line.
- [Streamgraph](https://beamline.io/components/streamgraph): Stacked flows over time around a centre baseline, with silhouette, wiggle, expand (shares) and zero offsets: a legend that turns layers on and off, a…
- [Treemap](https://beamline.io/components/treemap): Nested rectangles sized by value (spend by team, then service), squarified so tiles stay close to square: labels that fit or hide, hover and focus…
- [Waffle chart](https://beamline.io/components/waffle-chart): Units of a whole as a grid of cells by category (seats used of a plan, tickets by channel): a 10×10 grid by default, hatched cells for units whose…
