Askr documentation
UI & Components

Scales

Scales: anatomy, keyboard behavior, state, and theming in Askr.

Example

import { createPlot } from '@askrjs/charts';

const Plot = createPlot<ProjectRow>();

<Plot.Root data={rows} rowKey="id" label="Latency by service">
  <Plot.Scale name="latency" channel="y" type="log" nice />
  <Plot.Axis scale="latency" axis="y" label="Latency (ms)" />
  <Plot.Line x="timestamp" y="latencyMs" yScale="latency" />
</Plot.Root>

Scale types

Ten scale types cover positional, temporal, and color channels: band and point for categorical positions, linear, power, log, and symlog for numeric ranges, time and utc for Date values, and ordinal-color / continuous-color for color channels. log only accepts strictly positive input and drops zero and negative values; reach for symlog with a constant when the data can be signed or sit near zero.

Domains

Without an explicit Scale, the compiler infers a reasonable default from channel type and mark context — numeric values get linear, Date values get local time, categorical bar and cell positions get band, and categorical line/area/point positions get point. Add a Scale child to override domain, range, nice, clamp, reverse, or the padding options (padding, paddingInner, paddingOuter) that band and point scales use to space categories.

Named scales

Give a Scale a name and reference it from a mark's xScale, yScale, or colorScale prop to break out of the single implicit x/y/color scale — this is how dual-axis plots and mixed units under one Root work. Each named scale carries its own type, domain, and range, and axes reference the same name so labels line up with the values actually being drawn.

Formatting

Axis accepts a tickFormat function that receives each resolved scale value and returns display text, letting you format currency, units, or dates independent of the scale's own domain math. Root's locale prop feeds locale-aware defaults into inferred formatting elsewhere in the plot, such as tooltip and summary text, without requiring every axis to specify its own formatter.