Skip to content
EspañolEnglish
All components (204)

Stacked bars

Data · StackedBarChart

What it is and when to use it

Stacked bars: one stack per category with a segment per series, to see at once the total and what it is made of ("sales per month and per channel"). It shares the data, the scale, the legend and the table with LineChart and AreaChart.

The drawing is decoration and the table is the data: below it there is a real table (one row per category, one column per series), hidden from view unless tableVisible is set. Hovering a stack shows the value of each series and the total.

When to use it

  • A few categories (months, shops, weeks) where the total of each one and the split between series matter.
  • The order of series is the order of the stack: the first one goes at the bottom. Values are positive: a negative or a null draws no segment and does not add to the total.
  • The axis always starts at zero; min and max fix the scale by hand, to compare two charts.
  • format writes the values (euros, units) on the axis, on hover, in the summary and in the table; categoryName is the header of the first column of the table.

When not to

  • A single series, or comparing categories without a split: BarChart.
  • The evolution over many points: AreaChart with stacked, or LineChart.
  • Parts of a total at a single moment: DonutChart.

Keyboard: none: there is nothing to press. The complete data is in the table.

Accessibility: the drawing is an image (role="img") with a written summary of each series (where it goes from and to and where it peaks) and the table is always there for the screen reader. Colour is never the only clue: the legend (by default, only with more than one series) and the summary carry the name of each series, and each segment is separated from the one above by a line in the background colour.

Fine-tuning: CSS variables --amset-series-*: -axis, -bar (the widest a stack can be), -cap, -footer, -height and -label. The size moves the height (10, 14 or 18 rem) and the maximum width of the stack; height wins if passed. The colour of each series comes from its tone.

What it looks like

Chart type
  • Store
  • Online
  • Wholesale
Sales by month and channel
MonthStoreOnlineWholesale
Jul6,9005,1001,900
Aug5,2005,6002,400
Sep7,8006,3002,800

<StackedBarChart
  label="Sales by month and channel"
  categories={['Jul', 'Aug', 'Sep']}
  series={canales}
  categoryName="Month"
  tableVisible
/>

Props

Import it with import { StackedBarChart } from '@amset/ui'. Required props are marked.

PropTypeWhat it does
categoriesrequiredreadonly string[]What goes on the bottom axis: the months, the days. One per value of each series.
labelrequiredstringWhat is being measured. Required: a chart without a title does not inform.
seriesrequiredreadonly ChartSeries[]—
axesbooleanBackground lines with their number.
categoryNamestringWhat the first column of the table is called. By default, "Period".
classNamestringMerged with the library classes; it does not replace them.
format(value: number) => string—
heightnumberHeight of the drawing in pixels. By default, that of the size.
legendbooleanThe legend with the name of each series. By default, only if there is more than one.
maxnumber—
minnumberMinimum and maximum of the axis set by hand, to compare two charts on the same scale.
size"sm" | "md" | "lg"—
tableVisiblebooleanAlso shows the table. For the screen reader it is always there.

It also accepts the attributes of the element it renders: className, style, data-*, aria-* and its events.

In the test bench

Every state and variant, to try one at a time, on its page at ui.amset.tech: