Comparison · Intermediate
Slope chart
Change in size and rank between two points in time.
- Use when
- Comparing just two points in time, such as last year's and this year's share
- Avoid when
- 3 or more points in time (use a line or bump chart)
Try it
21
Slope chart
Market share by brand (%)
Hover over the chart, or Tab in and use the arrow keys to move between items. The numbers are sample data.
Code
SlopeChart.tsx
import { ChartCard, SlopeChart } from "ztd-charts";
const data = [
{"brand":"Our brand","period":"2024","share":18},
{"brand":"Our brand","period":"2025","share":27},
{"brand":"Brand A","period":"2024","share":31},
{"brand":"Brand A","period":"2025","share":28},
{"brand":"Brand B","period":"2024","share":24},
{"brand":"Brand B","period":"2025","share":21},
// … 4 more rows
];
export function Example() {
return (
<ChartCard number="21" title="Slope chart" subtitle="Market share by brand (%)" takeaway="Only we rose sharply" level="intermediate" replay>
<SlopeChart
data={data}
label="brand"
x="period"
value="share"
unit="%"
/>
</ChartCard>
);
}
Props
<SlopeChart> takes these props. Rows marked Common work the same on every chart.
28 props
| Prop |
|---|
dataRequiredAn array of objects. Pass CSV, REST or database rows as they areobject[] |
labelRequiredItem name fieldstring | (d, i) => string |
xPeriod field (long tables)string | (d, i) => string |
valueValue field (long tables)string | (d, i) => number |
startWide table: start value fieldstring |
endWide table: end value fieldstring |
periodLabelsTitles above the two axesstring[] |
heightCommonHeight in px. Without it, each chart picks a default that fits its widthnumber |
widthCommonFixed width in px. Without it, the chart fits its parentnumber |
highlightCommonItem to highlight. An index, a name, an array, or "max" | "min" | "first" | "last" | "none"number | string | (number|string)[] | "max" … |
formatCommonValue format. "number" | "integer" | "percent" (values are already percents: 42 → "42%") | "ratio" (0.42 → "42%") | "compact" | "currency" (KRW for Korean locales, otherwise USD; for another currency pass Intl options with currency) | "decimal" or Intl.NumberFormat options"number" | "percent" | "compact" | … |
unitCommonUnit appended to values. For example "%" or "ms"string |
localeCommonLocale for numbers, dates and the text a chart writes itself (tooltips, screen reader sentences). "ko" or "ko-*" switches to Korean. Falls back to the ThemeProvider localestringDefault "en-US" |
animateCommonEntry and update animationbooleanDefault true |
durationCommonAnimation length (ms)number |
easingCommonMotion curve"spring" | "easeOut" | "easeInOut" | "linear"Default "spring" |
staggerCommonDelay between items as they enter (ms)number |
reducedMotionCommon"auto" follows the OS setting. true always turns motion offanyDefault "auto" |
animateOnViewCommonPlay when the chart scrolls into viewbooleanDefault true |
showLabelsCommonLabels drawn on the chart (values and names)booleanDefault true |
tooltipCommonShow tooltips. { template: "{label} · {value} · owner {owner}" } writes them: {label}, {value}, {series} or any other column of the row. \n starts a new line, and a line with an empty value is left outtooltipDefault true |
syncIdCommonCharts with the same syncId show the hovered x together (line, area, bar, candlestick). <ChartGrid sync> sets one for every chart inside itstring |
ariaLabelCommonName for screen readersstring |
descriptionCommonDescription for screen readers. Built from the data when omittedstring |
onHoverCommonRuns when hover or keyboard focus moves to another item(e: ChartEvent | null) => void |
onClickCommonRuns on click, Enter or Space(e: ChartEvent) => void |
replayKeyCommonReplays the entry animation when it changesstring | number |
themeCommonChanges theme tokens for this chart onlyPartial<ChartTheme> |
Also in Comparison
- Waterfall chartBreaks the change from a start value to an end value into its drivers
- Pareto chartBars sorted largest first with a cumulative share line
- Radar chartCompares several metrics at once
- Bar chartGrouped, stacked, 100% and horizontal bars, with optional lines on the same axis
- Dumbbell chartThe gap between two values per item (before and after, target and actual)
- Lollipop chartA line and a dot instead of a bar. Stays light with many items