Bar chart race
Cities re-rank month by month with a ticker.
Why it matters dedicated barRace type: FLIP re-ranking with names that never cross, counting ticker, number countUp, reduced-motion snap; images are optional (not shown)
Open the chart without page chrome ↗
const options = {
chart: {
height: 380,
fontFamily: "Inter, Geist, \"IBM Plex Sans\", system-ui, sans-serif",
type: "barRace",
toolbar: {
show: false
}
},
series: [
{
name: "Active users (k)",
data: [
{
x: "Lisbon",
y: 53
},
{
x: "Oslo",
y: 56
},
{
x: "Seattle",
y: 74
},
{
x: "Osaka",
y: 68
},
{
x: "Austin",
y: 78
},
{
x: "Porto",
y: 59
},
{
x: "Tallinn",
y: 67
},
{
x: "Lyon",
y: 54
},
{
x: "Bergen",
y: 28
},
{
x: "Denver",
y: 60
}
]
}
],
plotOptions: {
barRace: {
maxBars: 8,
ticker: {
text: "Jan 2026"
},
values: {
formatter: (v) => v.toFixed(1) + 'k'
}
}
},
title: {
text: "Active users by city, top 8"
},
theme: {
mode: "light",
preset: "coastal"
}
}
const chart = new WestCoastCharts(document.querySelector('#chart'), options)
chart.render()import WestCoastCharts from 'west-coast-charts'
import types from 'west-coast-charts/types'
WestCoastCharts.use(types)
const options = {
chart: {
height: 380,
fontFamily: "Inter, Geist, \"IBM Plex Sans\", system-ui, sans-serif",
type: "barRace",
toolbar: {
show: false
}
},
series: [
{
name: "Active users (k)",
data: [
{
x: "Lisbon",
y: 53
},
{
x: "Oslo",
y: 56
},
{
x: "Seattle",
y: 74
},
{
x: "Osaka",
y: 68
},
{
x: "Austin",
y: 78
},
{
x: "Porto",
y: 59
},
{
x: "Tallinn",
y: 67
},
{
x: "Lyon",
y: 54
},
{
x: "Bergen",
y: 28
},
{
x: "Denver",
y: 60
}
]
}
],
plotOptions: {
barRace: {
maxBars: 8,
ticker: {
text: "Jan 2026"
},
values: {
formatter: (v) => v.toFixed(1) + 'k'
}
}
},
title: {
text: "Active users by city, top 8"
},
theme: {
mode: "light",
preset: "coastal"
}
}
const chart = new WestCoastCharts(document.querySelector('#chart'), options)
await chart.render() Waiting for the chart.
Open Data & agent view to read this chart through chart.describe().
Read from the running library through its optional agent/describe module. Text, table and JSON share the same snapshot. Demo data only.
$ wcc chart export bar-horizontal-bar-race.json --out bar-horizontal-bar-race.svg --with-table Public agent tools 0.2.3, tested with Library 1.1.5; available from the versioned GitHub release and npm. Save a JSON spec first and check the loaded runtime and supported modules before rendering. Command reference
Loading /gallery/bar/horizontal-bar-race/index.md …