Skip to content
InsightCharts

Search

Search guides and components

Bump chart

Shows how the ranking of entities changes over time, with rank 1 at the top and each line named at its end.

Use when
League tables over 3 to about 15 periods for up to about 12 entities, when the order and the changes in rank are what matter and the underlying values differ too much (or too little) to share an axis.
Avoid when
When the size of the values matters (use line chart); only two periods (use slope chart); a single ranking (use bar chart or lollipop chart).

Preview

BYD rose from fifth in 2020 to first in 2022

Rank among six carmakers by plug-in vehicles sold worldwide, 2019 to 2024

Source: Company reports · Approximate figures.

Composition

Used in

No molecule or template lists bump chart in its composes. It still fits any slot that takes a component.

Installation

$ pnpm dlx shadcn@latest add @insightcharts/bump-chart

The CLI copies the source into your project and needs the @insightcharts registry in components.json; see installation. With the package, import it by name:

import { BumpChart } from "insightcharts";

Examples

Every line coloured

Arsenal rose from eighth in 2020 to second in 2024

Final Premier League position, seasons ending 2020 to 2024

Source: Premier League · Figures are approximate, for illustration

Long format with a late entrant

Rust ranked third in 2024 with 14% of new repositories

Rank by share of new repositories, by primary language

Illustrative figures.

Stress: 12 entities over 10 periods

Rank of 12 countries by an illustrative index, 2015 to 2024

The eight highest-ranked countries in 2024 are coloured

Synthetic data for layout testing.

Props

PropTypeDefaultDescription
xrequiredstringTime or ordered category field.
yrequiredstring | string[]Value field to rank by, or several (one line each).
seriesstringField that splits rows into entities (long data).
rankedbooleanfalseThe values are already ranks (1 = best) and are plotted as given.
order"desc" | "asc""desc"Which values rank first when ranks are computed: largest (desc) or smallest (asc).
startLabelsbooleanName lines at the start as well as the end. Default: on when the chart is wide enough.
namesRecord<string, string>Display names for series keys.
Common chart props 29

Every chart built with defineChart accepts these on top of its own props.

PropTypeDescription
dataDataInputRows, CSV text, a URL, { url, path }, an async function, or an Arrow-style table. Omit inside <InsightData>.
transformTransform | Transform[]A pipeline of transforms applied before drawing.
titlestringThe title. One plain statement of what the data shows, with the number and the period ("Monthly churn fell from 4.2% to 2.1% in 2024"), or a plain label ("Monthly churn, 2024"). One clause, no figures of speech.
subtitlestringMeasure, unit, population, period.
sourcestringData source, shown as "Source: ...".
notestringMethod notes or caveats.
heightnumber | stringCSS height of the plot. Default 360.
aspectnumberWidth / height. Overrides height.
highlightstring | string[]The entity (or entities) the title is about. Every other series is drawn in grey.
annotationsAnnotation[]Reference lines, shaded bands and callouts, in data coordinates.
formatFormatSpecHow to print values: "compact", "percent", "currency:USD", "{value} kg", Intl options, or a function.
legendbooleanShow the legend. Default: shown when there are two or more series.
selectboolean | stringMake marks clickable to filter. Inside <InsightData> the selection filters every other chart. Pass a field name, or true to use the chart's category field.
onSelect(values: string[], field: string) => voidCalled with the selected values whenever the selection changes.
optionEChartsOption | ((option: EChartsOption, ctx: BuildContext) => EChartsOption)Deep-merged over the generated ECharts option, or a function that receives and returns it. Use it for ECharts settings no prop covers.
themeThemeInputA theme, or a partial set of tokens merged over the surrounding theme, for this chart only.
modeModeInput"auto" (default) follows the page, "system" follows the OS, or force "light" / "dark".
rendererRendererInput"auto" (default) uses SVG for light charts and canvas for heavy ones.
animatebooleanSet false to disable animation. Reduced-motion preferences are always respected.
lazybooleanMount the chart only when it scrolls near the viewport. Default true.
groupstringLink tooltips with other charts sharing this group id.
exportableboolean | ExportFormat[]Show an export menu: true or a list of formats from png, jpeg, svg, pdf, csv, json.
tablebooleanShow a collapsible "View data" table under the chart.
altstringAccessible description: the chart type and measures, then the main pattern and the notable values.
idstringStable id for this chart's selection in the shared store.
onEventsRecord<string, ChartEventHandler>ECharts event handlers, e.g. { click: (params, chart) => {} }. Prefix a name with zr: to bind to the canvas itself.
onReady(chart: EChartsInstance) => voidCalled with the ECharts instance once it is created.
classNamestringClass name for the outer <figure>.
styleCSSPropertiesInline style for the outer <figure>.