Composed Chart

Bars and lines on one value axis, such as results against a target.
Beta
Web
iOS
Android
@advui/charts
Source

Bars and a target line

People reached against the targetThousands of people per month, 2026
Reached
Target

Installation

pnpm
pnpm add @advui/charts
npm
npm install @advui/charts

Usage

import { ComposedChart } from '@advui/charts'

<ComposedChart
  title="Reached against the target"
  data={[{ month: 'Jan', reached: 18, target: 20 }, { month: 'Feb', reached: 21, target: 20 }]}
  index="month"
  series={[
    { key: 'reached', label: 'Reached' },
    { key: 'target', label: 'Target', type: 'line', dashed: true },
  ]}
/>

Examples

Stacked bars and a total

Funding received, by organization typeMillions of USD, 2026
UN
INGO
NGO
Total

API reference

ComposedChart

PropTypeDefaultDescription
title requiredstring—Names the chart: its heading and accessible name.
descriptionstring—Muted line under the title (units, period).
data requiredT[]—One object per category. Its type `T` (an interface works) is inferred, and `index` and `series` must name its fields.
index requiredkeyof T & string—Field holding each row’s label.
indexLabelstring`index`Heading of the label column in the table view.
series required{ key: keyof T & string; label: string; type?: 'bar' | 'line'; dashed?: boolean }[]—Numeric fields to plot, drawn as bars unless `type` is `line`; `dashed` suits a target or forecast. Colors follow this order (`chart1`…`chart8`). An array declared apart from the chart needs `as const` to keep its keys literal.
stackedbooleanfalseStacks the bar series in one bar per category. Lines are never stacked.
valueFormatter(value: number) => string—Formats tooltip and table values. Axis ticks are compact (1.2K).
heightnumber240Pixels, including the axes.
widthnumber—Fixed width. By default it fills its container.
surfaceColorTokens'background'The color behind the chart, for the ring around line markers. Use `card` inside a Card.
labelsPartial<ChartLabels>—"Show table", "Hide table" and the keyboard hint, for translation.

Accessibility

  • The chart is a figure named by its title. The plot is one focusable image whose name gives the title, description and a hint; the arrow keys (Home / End too) step through the categories, and a polite live region reads every series’ value there.
  • Every chart has a table view ("Show table") with the same values, so nothing depends on seeing colors or hovering.
  • Identity never relies on color alone: two or more series get a legend whose marks match the drawing (a square for bars, a line for lines), and the tooltip names each value.
  • Colors come from the chart1…chart8 theme keys, a palette checked for color-blind separation in light and dark mode.
Keyboard interactions
KeyAction
TabFocuses the plot, then the table button.
Arrow keys / Home / EndMove between categories and read them.
EscapeHides the tooltip.

Responsive behavior

Fills its container; category labels thin out when they would overlap.

Platform notes

Web
SVG in the page. Hover shows the tooltip; the arrow keys work once the plot has focus.
iOS
Drawn with react-native-svg. Tap the plot to show the tooltip for that category. VoiceOver and TalkBack read the title and description, without the arrow-key hint; Show table lists every value.
Android
Same as iOS.
Since v0.14.0Last updated Nov 2, 2026Edit this page on GitHub