Line

Line charts join values in order, to show how one or more series trend, rise and fall over time.

LLMs

Accessibility

What TanStack Charts does for line charts on its own, and what you add so that everyone can read them.

What you get

  • A named chart. ariaLabel is required, and the chart is exposed as an image with that name. ariaDescription adds a longer description.
  • Keyboard navigation, on by default. Tab moves into the chart and focuses the first point. Arrow keys move between them, and Home and End jump to the first and the last. Enter or Space pins a sticky tooltip, and Escape closes it.
  • The tooltip is announced to screen readers as it changes, so a keyboard user hears the values of the focused point.
  • A visible focus ring in the theme's focus color, shown for keyboard focus only.
  • Reduced motion. Animated charts skip their animation when the reader has asked for less motion.
  • An interactive legend made of real buttons, each with a pressed state, when you use interactiveColorLegend.

What you add

  • A label that says what the chart shows, its unit and its period. "Desktop and mobile visitors by month, January to June" works. "Line chart" does not.
  • A visible title, and a subtitle with the unit and the period, in HTML next to the chart.
  • The exact values another way, when they matter: a table under the chart, behind a toggle, or a download.
  • A second signal besides color for every series or part.
  • A keyboard path for every control you add yourself, such as a series filter or a period picker.

Name and describe the chart

Keep the label short and put the takeaway in the description. Do not put every value into the name: a screen reader reads it in one breath.
<Chart
definition={definition}
ariaLabel="Desktop and mobile visitors by month, January to June"
ariaDescription="Desktop visitors peaked in February and fell below mobile in April."
/>

Give the values as a table

A table is the most reliable way to give exact values to everyone, including people who zoom far in or print the page. Render the same array the chart reads with the kit's Table, under the chart or behind a "Show as table" switch. When the values are only an illustration, a one sentence summary is enough.

Do not rely on color

  • Give each line its own dash pattern, so the series stay apart in grayscale and for readers who do not see the colors apart.
  • Name each line at its end, so no one has to match colors to a legend.
  • Make the lines at least 2px wide. Thin, light lines fail contrast against the page first.
  • Marks need enough contrast with the background. Check light colors from a palette against the page in light and dark mode.

Dash patterns per series

strokeDasharray applies to a whole mark, so draw one lineY per series and give each its own pattern. Keep the solid line for the series that matters most, and keep color on every mark so the colors still come from the shared scale.
const desktop = visitors.filter((row) => row.device === "Desktop")
const mobile = visitors.filter((row) => row.device === "Mobile")
marks: [
lineY(desktop, { x: "month", y: "visitors", color: "device" }),
lineY(mobile, {
x: "month",
y: "visitors",
color: "device",
strokeDasharray: "6 4",
}),
]

Labels at the end of each line

A label beside the last point names the series where the eye already is, and it reads the same in any color. Pick each series' last row with select and draw it with a text mark, as shown on the Code tab. With end labels in place you can drop the legend.

Turning the keyboard off

A static chart with no tooltip can pass keyboard: false in the second argument of defineChart, so it does not add a tab stop. Keep it on for any chart that shows values on hover: otherwise keyboard users never see them.

Check it

  • Tab into the chart and read every point with the arrow keys.
  • Listen to it with a screen reader.
  • Zoom the page to 400% and confirm the values are still there.
  • View it in grayscale and confirm the series are still apart.
The Accessibility guideline has the principles that apply to every chart.