---
title: "Time Axis"
framework: react
version: "14.1.0"
---

# Time Axis

Time axes are used to display time-based data in a chart. They can be used to show data at different levels of granularity, such as years, months, days, or even hours and minutes.

Time can be provided as a `Date` object, a `number` which is interpreted as timestamps derived from Unix time or an ISO 8601 string.

There are three methods of displaying time along an axis.

- [Unit Time Axis](#unit-time) - Each 'unit' has a dedicated band within the domain.
- [Ordinal Time Axis](#ordinal-time) - Only provided values are shown, with missing values omitted.
- [Continuous Time Axis](#continuous-time) - Data is shown on a continuous scale.

The difference between a [Unit Time Axis](#unit-time), an [Ordinal Time Axis](#ordinal-time), and a [Continuous Time Axis](#continuous-time) is demonstrated in the following example:

#### Time Axis Types

```tsx
import React, { useState, Fragment } from "react";
import { createRoot } from "react-dom/client";
import { AgCharts } from "ag-charts-react";
import {
  AgCartesianChartOptions,
  AnimationModule,
  BarSeriesModule,
  ContextMenuModule,
  CrosshairModule,
  LegendModule,
  ModuleRegistry,
  NumberAxisModule,
  OrdinalTimeAxisModule,
  TimeAxisModule,
  UnitTimeAxisModule,
} from "ag-charts-enterprise";
import clone from "clone";

ModuleRegistry.registerModules([
  AnimationModule,
  BarSeriesModule,
  CrosshairModule,
  LegendModule,
  NumberAxisModule,
  OrdinalTimeAxisModule,
  TimeAxisModule,
  UnitTimeAxisModule,
  ContextMenuModule,
]);

const ChartExample = () => {
  const [options, setOptions] = useState<AgCartesianChartOptions>({
    title: {
      text: "School Absences",
    },
    data: [
      { date: new Date(2024, 0, 1), value: 2 },
      { date: new Date(2024, 1, 1), value: 5 },
      { date: new Date(2024, 2, 1), value: 3 },
      { date: new Date(2024, 3, 1), value: 1 },
      { date: new Date(2024, 4, 1), value: 2 },
      { date: new Date(2024, 5, 1), value: 3 },
      { date: new Date(2024, 9, 1), value: 1 },
      { date: new Date(2024, 10, 1), value: 2 },
      { date: new Date(2024, 11, 1), value: 2 },
    ],
    series: [
      {
        type: "bar",
        xKey: "date",
        yKey: "value",
      },
    ],
    axes: {
      x: {
        type: "unit-time",
        title: { text: "Unit Time Axis" },
      },
    },
  });

  const setContinuousTimeAxis = () => {
    const nextOptions = clone(options);

    nextOptions.axes = {
      x: {
        type: "time",
        title: { text: "Continuous Time Axis" },
      },
    };

    setOptions(nextOptions);
  };

  const setUnitTimeAxis = () => {
    const nextOptions = clone(options);

    nextOptions.axes = {
      x: {
        type: "unit-time",
        title: { text: "Unit Time Axis" },
      },
    };

    setOptions(nextOptions);
  };

  const setOrdinalTimeAxis = () => {
    const nextOptions = clone(options);

    nextOptions.axes = {
      x: {
        type: "ordinal-time",
        interval: {
          step: "month",
        },
        title: { text: "Ordinal Time Axis" },
      },
    };

    setOptions(nextOptions);
  };

  return (
    <Fragment>
      <div className="example-controls">
        <div className="controls-row">
          <button onClick={setUnitTimeAxis}>Unit Time Axis</button>
          <button onClick={setOrdinalTimeAxis}>Ordinal Time Axis</button>
          <button onClick={setContinuousTimeAxis}>Continuous Time Axis</button>
        </div>
      </div>
      <AgCharts options={options} />
    </Fragment>
  );
};

const root = createRoot(document.getElementById("root")!);
root.render(<ChartExample />);
```

[Live example: Time Axis Types](https://www.ag-grid.com/charts/reactFunctionalTs/axes-time/examples/time-vs-unit-time-vs-ordinal-time)

## Unit Time

The Unit Time Axis will plot time values with evenly spaced bands for each unit of time in the domain, regardless of the actual time span between them or missing data.

For example, with a `month` unit, dates of 01 Jan and 30 Mar will appear as three evenly spaced items representing "January", "February" and "March".

```js
{
    axes: {
        x: { type: 'unit-time' },
    },
}
```

> **Note**
>
> The Unit Time Axis does not aggregate data, so you should ensure that each series only has one value per `unit`.

### Custom Unit

The Unit Time Axis assumes that data is provided with one item per unit, and will infer a `unit` based on the data.

For some scenarios - such as datasets with missing data points - it may be necessary to specify the `unit` explicitly. To explicitly set the `unit`, provide an `AgTimeIntervalUnit` string or `AgTimeInterval` object.

```js
{
    axes: {
        x: {
            type: 'unit-time',
            unit: 'day', // every day
        },
    },
}
```

In this configuration:

- `unit` must be one of `millisecond`, `second`, `minute`, `hour`, `day`, `month`, or `year`.

> **Note**
>
> The `axes[].unit` property controls how time is bucketed for display. See [Time Interval](#reference-AgTimeInterval) to control the spacing of ticks, grid lines, and labels.

### Weekly Data Example

The `AgTimeIntervalUnit` object supports advanced configuration for more complex `unit` requirements such as weekly data.

#### Unit Time (Custom Unit)

```tsx
import React, { useState } from "react";
import { createRoot } from "react-dom/client";
import { AgCharts } from "ag-charts-react";
import {
  AgCartesianChartOptions,
  AnimationModule,
  BarSeriesModule,
  ContextMenuModule,
  CrosshairModule,
  LegendModule,
  ModuleRegistry,
  NavigatorModule,
  NumberAxisModule,
  UnitTimeAxisModule,
  ZoomModule,
} from "ag-charts-enterprise";
import { getData } from "./data";

ModuleRegistry.registerModules([
  AnimationModule,
  BarSeriesModule,
  CrosshairModule,
  LegendModule,
  NavigatorModule,
  NumberAxisModule,
  UnitTimeAxisModule,
  ZoomModule,
  ContextMenuModule,
]);

const ChartExample = () => {
  const [options, setOptions] = useState<AgCartesianChartOptions>({
    title: {
      text: "Influenza Cases",
    },
    subtitle: {
      text: "Recorded Data for 2024",
    },
    data: getData(),
    series: [
      {
        type: "bar",
        xKey: "date",
        xName: "Time",
        yKey: "total_cases",
        yName: "Total Cases",
        stacked: true,
      },
      {
        type: "bar",
        xKey: "date",
        xName: "Time",
        yKey: "hospitalizations",
        yName: "Hospitalizations",
        stacked: true,
      },
      {
        type: "bar",
        xKey: "date",
        xName: "Time",
        yKey: "deaths",
        yName: "Deaths",
        stacked: true,
      },
    ],
    axes: {
      x: {
        type: "unit-time",
        unit: {
          unit: "day",
          step: 7,
          epoch: new Date(2024, 0, 1),
        },
        parentLevel: {
          enabled: false,
        },
      },
    },
    zoom: {
      enabled: true,
    },
    navigator: {
      enabled: true,
    },
    initialState: { zoom: { ratioX: { start: 0.8 } } },
    tooltip: {
      mode: "shared",
    },
    formatter: {
      x(params) {
        if (
          params.type === "date" &&
          params.unit === "day" &&
          params.step === 7 &&
          params.epoch != null
        ) {
          const { value, epoch } = params;
          const weekDuration = 7 * 24 * 60 * 60 * 1000;
          const week = Math.floor(
            (value.getTime() - epoch.getTime()) / weekDuration,
          );
          return `Week ${week + 1}`;
        }
      },
    },
  });

  return <AgCharts options={options} />;
};

const root = createRoot(document.getElementById("root")!);
root.render(<ChartExample />);
```

[Live example: Unit Time (Custom Unit)](https://www.ag-grid.com/charts/reactFunctionalTs/axes-time/examples/unit-time-unit)

```js
{
    axes: {
        x: {
            type: 'unit-time',
            unit: {
                unit: 'day',
                step: 7, //every 7 days (weekly)
                epoch: new Date(2024, 0, 1), //start the week on Monday
            },
        },
    },
}
```

In this example:

- `step` specifies the multiple of the unit to use. In this example, `step: 7` combined with `unit: 'day'` will display one data point for any provided date within each week.
- `epoch` is an optional `Date` that specifies the starting point for the unit. In this example, the week runs from Monday to Monday.
- In this example, a [Formatter](https://www.ag-grid.com/charts/react/formatters/) is used to format the labels as numbered weeks of the year.

For a full list of configuration options see [Unit Time Axis Options](#reference-AgUnitTimeAxisOptions).

## Ordinal Time

Data points plotted along an Ordinal Time Axis will be arranged according to their position in time, ignoring the time intervals between them. This is unlike the [Unit Time](#unit-time) and [Continuous Time Axis](#continuous-time), which represent time with consistent intervals.

For example, if the Ordinal Time Axis is used to plot daily values but there are no data points for the weekend, values for Friday and Monday will be equally spaced, without gaps for Saturday and Sunday.

Ordinal Time axes are commonly used for financial data on the x-axis, usually placed at the bottom of a chart.

A basic Ordinal Time Axis configuration looks like this:

```js
{
    axes: {
        x: {
            type: 'ordinal-time',
        },
    },
}
```

For a full list of configuration options see [Ordinal Time Axis Options](#reference-AgOrdinalTimeAxisOptions).

## Continuous Time

The time axis is similar to the number axis in the sense that it is also used to plot continuous values.

Time axes are typically used as x-axes and placed at the bottom of a chart. The simplest time axis config looks like this:

```js
{
    axes: {
        x: {
            type: 'time',
        },
    },
}
```

For a full list of configuration options see [Continuous Time Axis Options](#reference-AgTimeAxisOptions).

## Time Intervals

The [Axis Interval](https://www.ag-grid.com/charts/react/axes-intervals/) of Time Axes labels, grid lines and ticks can be customised with the `interval.step` parameter, which should be a `AgTimeInterval` or `AgTimeIntervalUnit`.

#### Time Axis Interval

```tsx
import React, { useState, Fragment } from "react";
import { createRoot } from "react-dom/client";
import { AgCharts } from "ag-charts-react";
import {
  AgCartesianChartOptions,
  AgUnitTimeAxisThemeOptions,
  LegendModule,
  LineSeriesModule,
  ModuleRegistry,
  NumberAxisModule,
  TimeAxisModule,
} from "ag-charts-community";
import clone from "clone";

ModuleRegistry.registerModules([
  LegendModule,
  LineSeriesModule,
  NumberAxisModule,
  TimeAxisModule,
]);

const ChartExample = () => {
  const [options, setOptions] = useState<AgCartesianChartOptions>({
    title: {
      text: "Monthly average daily temperatures in the UK",
    },
    series: [
      {
        type: "line",
        xKey: "date",
        yKey: "temp",
      },
    ],
    axes: {
      x: {
        type: "time",
        nice: false,
        interval: {
          step: { unit: "day", step: 7, epoch: new Date("2025-01-01") },
        },
        label: {
          autoRotate: true,
        },
      },
      y: {
        type: "number",
        label: {
          format: "#{~f} °C",
        },
      },
    },
    data: [
      { date: new Date("2025-01-01"), temp: 4.2 },
      { date: new Date("2025-01-08"), temp: 4.9 },
      { date: new Date("2025-01-15"), temp: 5.1 },
      { date: new Date("2025-01-22"), temp: 6.9 },
      { date: new Date("2025-01-29"), temp: 7.2 },
      { date: new Date("2025-02-05"), temp: 7.5 },
      { date: new Date("2025-02-12"), temp: 7.9 },
      { date: new Date("2025-02-19"), temp: 8.7 },
      { date: new Date("2025-02-26"), temp: 8.8 },
      { date: new Date("2025-03-05"), temp: 9.1 },
      { date: new Date("2025-03-12"), temp: 9.2 },
      { date: new Date("2025-03-19"), temp: 9.3 },
      { date: new Date("2025-03-26"), temp: 9.5 },
      { date: new Date("2025-04-02"), temp: 9.8 },
      { date: new Date("2025-04-09"), temp: 10.2 },
      { date: new Date("2025-04-16"), temp: 10.7 },
      { date: new Date("2025-04-23"), temp: 10.8 },
      { date: new Date("2025-04-30"), temp: 11.2 },
      { date: new Date("2025-05-07"), temp: 11.3 },
    ],
  });

  const setOneWeekInterval = () => {
    const nextOptions = clone(options);

    (nextOptions.axes!.x as AgUnitTimeAxisThemeOptions).interval!.step = {
      unit: "day",
      step: 7,
      epoch: new Date("2025-01-01"),
    };

    setOptions(nextOptions);
  };

  const setOneMonthInterval = () => {
    const nextOptions = clone(options);

    (nextOptions.axes!.x as AgUnitTimeAxisThemeOptions).interval!.step =
      "month";

    setOptions(nextOptions);
  };

  const setTwoMonthInterval = () => {
    const nextOptions = clone(options);

    (nextOptions.axes!.x as AgUnitTimeAxisThemeOptions).interval!.step = {
      unit: "month",
      step: 2,
    };

    setOptions(nextOptions);
  };

  return (
    <Fragment>
      <div className="example-controls">
        <div className="controls-row">
          <button onClick={setOneWeekInterval}>1 Week Interval</button>
          <button onClick={setOneMonthInterval}>1 Month Interval</button>
          <button onClick={setTwoMonthInterval}>2 Month Interval</button>
        </div>
      </div>
      <AgCharts options={options} />
    </Fragment>
  );
};

const root = createRoot(document.getElementById("root")!);
root.render(<ChartExample />);
```

[Live example: Time Axis Interval](https://www.ag-grid.com/charts/reactFunctionalTs/axes-time/examples/time-interval)

```js
{
    interval: {
        step: 'month',
    },
}
```

```js
{
    interval: {
        step: {
            unit: 'day',
            step: 7, // every 7 days (weekly)
            epoch: new Date('2024-01-01'), //start the week on a Monday
        },
    },
}
```

In this configuration:

- `unit` must be one of `millisecond`, `second`, `minute`, `hour`, `day`, `month`, or `year`.
- `step` is an optional number that specifies the multiple of the unit to use.
- `epoch` is an optional `Date` that specifies the starting point for the interval.

> **Note**
>
> The `interval.step` property controls the spacing of ticks, grid lines, and labels. Use a [Unit Time Axis](#unit-time) to control how time is bucketed for display.

See [Time Interval](#reference-AgTimeInterval) for more information on the `interval.step` property.

## Parent Levels

The `parentLevel` option allows displaying labels and ticks for the parent level of the time axes. For example, if the axis is showing monthly data, the parent level would be the years. These levels are based on the data displayed, and adjust dynamically as the user zooms in and out.

It is enabled by default for the [Unit Time Axis](#unit-time), and can be opted into for the [Continuous Time Axis](#continuous-time) and [Ordinal Time Axis](#ordinal-time).

#### Parent Level

```tsx
import React, { useState, useRef, Fragment } from "react";
import { createRoot } from "react-dom/client";
import { AgCharts } from "ag-charts-react";
import {
  AgCartesianChartOptions,
  AgChartsInstance,
  AnimationModule,
  ContextMenuModule,
  CrosshairModule,
  LegendModule,
  LineSeriesModule,
  ModuleRegistry,
  NavigatorModule,
  NumberAxisModule,
  UnitTimeAxisModule,
  ZoomModule,
} from "ag-charts-enterprise";
import { getData } from "./data";
import clone from "clone";

ModuleRegistry.registerModules([
  AnimationModule,
  CrosshairModule,
  LegendModule,
  LineSeriesModule,
  NavigatorModule,
  NumberAxisModule,
  UnitTimeAxisModule,
  ZoomModule,
  ContextMenuModule,
]);

const ChartExample = () => {
  const chartRef = useRef<AgChartsInstance>(null);
  const [options, setOptions] = useState<AgCartesianChartOptions>({
    data: getData(800),
    series: [
      {
        type: "line",
        xKey: "date",
        yKey: "price",
        marker: {
          enabled: false,
        },
      },
    ],
    axes: {
      x: {
        type: "unit-time",
        parentLevel: {
          enabled: true,
        },
      },
    },
    zoom: {
      enabled: true,
    },
    navigator: {
      enabled: true,
    },
    initialState: {
      zoom: {
        ratioX: { start: 0.95, end: 1 },
      },
    },
  });

  const zoomOut = () => {
    chartRef.current!.setState({
      version: "11.0.0",
      zoom: {
        ratioX: { start: 0, end: 1 },
      },
    });
  };

  const zoomMonth = () => {
    chartRef.current!.setState({
      version: "11.0.0",
      zoom: {
        ratioX: { start: 0.95, end: 1 },
      },
    });
  };

  return (
    <Fragment>
      <div className="example-controls">
        <div className="controls-row">
          <button onClick={zoomOut}>Zoom All Data</button>
          <button onClick={zoomMonth}>Zoom Last Month</button>
        </div>
      </div>
      <AgCharts ref={chartRef} options={options} />
    </Fragment>
  );
};

const root = createRoot(document.getElementById("root")!);
root.render(<ChartExample />);
```

[Live example: Parent Level](https://www.ag-grid.com/charts/reactFunctionalTs/axes-time/examples/axis-parent-level)

```js
{
    parentLevel: {
        enabled: true,
    },
}
```

In this example:

- The data is shown with a 'day' unit, and the parent level of 'month' is shown in bold.
- As you zoom out, the labels will change to 'month', with a parent level of 'year'.

### Customisation

Parent level labels and ticks options are inherited from the axes label and tick options, but can be customised with the `parentLevel` options.

#### Parent Level Customisation

```tsx
import React, { useState, useRef, Fragment } from "react";
import { createRoot } from "react-dom/client";
import { AgCharts } from "ag-charts-react";
import {
  AgChartOptions,
  AgChartsInstance,
  AnimationModule,
  ContextMenuModule,
  CrosshairModule,
  LegendModule,
  LineSeriesModule,
  ModuleRegistry,
  NavigatorModule,
  NumberAxisModule,
  UnitTimeAxisModule,
  ZoomModule,
} from "ag-charts-enterprise";
import { getData } from "./data";
import clone from "clone";

ModuleRegistry.registerModules([
  AnimationModule,
  CrosshairModule,
  LegendModule,
  LineSeriesModule,
  NavigatorModule,
  NumberAxisModule,
  UnitTimeAxisModule,
  ZoomModule,
  ContextMenuModule,
]);

const ChartExample = () => {
  const chartRef = useRef<AgChartsInstance>(null);
  const [options, setOptions] = useState<AgChartOptions>({
    data: getData(800),
    series: [
      {
        type: "line",
        xKey: "date",
        yKey: "price",
        marker: {
          enabled: false,
        },
      },
    ],
    axes: {
      x: {
        type: "unit-time",
        label: {
          spacing: 8,
          format: {
            day: "%e",
            month: "%b",
          },
        },
        parentLevel: {
          enabled: true,
          tick: {
            width: 1,
            size: 4,
          },
          label: {
            spacing: 4,
            format: {
              month: "%e\n%b",
              year: "%b\n%Y",
            },
          },
        },
      },
    },
    zoom: {
      enabled: true,
    },
    navigator: {
      enabled: true,
    },
    initialState: {
      zoom: {
        ratioX: { start: 0.95, end: 1 },
      },
    },
  });

  const zoomOut = () => {
    chartRef.current!.setState({
      version: "11.0.0",
      zoom: {
        ratioX: { start: 0, end: 1 },
      },
    });
  };

  const zoomMonth = () => {
    chartRef.current!.setState({
      version: "11.0.0",
      zoom: {
        ratioX: { start: 0.95, end: 1 },
      },
    });
  };

  return (
    <Fragment>
      <div className="example-controls">
        <div className="controls-row">
          <button onClick={zoomOut}>Zoom All Data</button>
          <button onClick={zoomMonth}>Zoom Last Month</button>
        </div>
      </div>
      <AgCharts ref={chartRef} options={options} />
    </Fragment>
  );
};

const root = createRoot(document.getElementById("root")!);
root.render(<ChartExample />);
```

[Live example: Parent Level Customisation](https://www.ag-grid.com/charts/reactFunctionalTs/axes-time/examples/axis-parent-level-customisation)

```js
{
    tick: {
        width: 0,
    },
    label: {
        format: {
            day: '%e',
            month: '%b',
        },
    },
    parentLevel: {
        enabled: true,
        tick: {
            width: 1,
        },
        label: {
            format: {
                month: '%e\n%b',
                year: '%b\n%Y',
            },
        },
    },
}
```

In this configuration:

- The label format is set to show the day and month for the `day` level, and the month for the `month` level.
- The parent level tick is given a width of `1` to show the parent level ticks.
- The parent level label format is set to show the day and month on separate lines for the `month` level, and the month and year on separate lines for the `year` level.

See [Axis Labels](https://www.ag-grid.com/charts/react/axes-labels/#label-text-formatting) and the [Formatters](https://www.ag-grid.com/charts/react/formatters/) pages for more information on formatting labels.

## API Reference

#### Unit Time Axis

| Property | Type | Default | Description |
| --- | --- | --- | --- |
| type | 'unit-time' |  | Axis type identifier. |
| crossLines | Array<AgLineCrossLineOptions \| AgRangeCrossLineOptions> |  | Add cross-lines or regions corresponding to data values. |
| parentLevel | AgTimeAxisParentLevel |  | Options for labels and ticks for the parent level intervals. |
| parentLevel.enabled | boolean |  | Enables parent level labels and ticks. |
| parentLevel.label | AgCartesianTimeAxisLabelOptions |  | Configuration for the axis labels, shown next to the ticks. |
| parentLevel.label.autoRotate | boolean |  | If specified and axis labels may collide, they are rotated so that they are positioned at the supplied angle. This is enabled by default for category. If the `rotation` property is specified, it takes precedence. |
| parentLevel.label.autoRotateAngle | Degree |  | If autoRotate is enabled, specifies the rotation angle to use when autoRotate is activated. Defaults to an angle of 335 degrees if unspecified. |
| parentLevel.label.wrapping | 'never' \| 'always' \| 'hyphenate' \| 'on-space' | 'on-space' | Text wrapping strategy for long text. - `'always'` will always wrap text to fit within the `maxWidth`. - `'hyphenate'` is similar to `'always'`, but inserts a hyphen (`-`) if forced to wrap in the middle of a word. - `'on-space'` will only wrap on white space. If there is no possibility to wrap a line on space and satisfy the `maxWidth`, the text will be truncated. - `'never'` disables text wrapping. |
| parentLevel.label.truncate | boolean |  | If truncate is enabled, the text will be truncated to fit available space and an ellipsis (`...`) will be added at the end of the text. |
| parentLevel.label.enabled | boolean |  | Set to `false` to hide the axis labels. |
| parentLevel.label.rotation | Degree |  | The rotation of the axis labels in degrees. Note: for integrated charts the default is 335 degrees, unless the axis shows grouped or default categories (indexes). The first row of labels in a grouped category axis is rotated perpendicular to the axis line. |
| parentLevel.label.avoidCollisions | boolean |  | Avoid axis label collision by automatically reducing the number of ticks displayed. If set to `false`, axis labels may collide. |
| parentLevel.label.minSpacing | PixelSize |  | Minimum gap in pixels between the axis labels before being removed to avoid collisions. |
| parentLevel.label.formatter | RichFormatter |  | Function used to render axis labels. If `value` is a number, `fractionDigits` will also be provided, which indicates the number of fractional digits used in the step between ticks; for example, a tick step of `0.0005` would have `fractionDigits` set to `4` |
| parentLevel.label.itemStyler | Styler |  | Function used to style axis labels. |
| parentLevel.label.fontStyle | FontStyle |  | The font style to use for the labels. |
| parentLevel.label.fontWeight | FontWeight |  | The font weight to use for the labels. |
| parentLevel.label.fontSize | FontSize |  | The font size in pixels to use for the labels. |
| parentLevel.label.fontFamily | FontFamily \| GoogleFontFamily \| Array<FontFamily \| GoogleFontFamily> |  | The font family to use for the labels. A single family name, or an array of names used as fallbacks. |
| parentLevel.label.spacing | PixelSize |  | Spacing in pixels between the axis label and the tick. |
| parentLevel.label.color | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour to use for the labels. A colour string, or a theme-colour reference object. |
| parentLevel.label.border | BorderOptions |  | Stroke options for the box border. |
| parentLevel.label.border.enabled | boolean |  | Whether the associated elements and properties should be used in the chart. |
| parentLevel.label.border.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour for the stroke. |
| parentLevel.label.border.strokeWidth | PixelSize |  | The width of the stroke in pixels. |
| parentLevel.label.border.strokeOpacity | Opacity |  | The opacity of the stroke colour. |
| parentLevel.label.cornerRadius | PixelSize |  | Apply rounded corners to the label box. |
| parentLevel.label.padding | PixelSize \| PaddingOptions |  | Distance between the label text and the border. A number applies uniform padding; an object sets each side. |
| parentLevel.label.fill | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor \| AgGradientColor \| AgPatternColor \| AgImageFill |  | The colour for filling shapes. A colour string, or an object for a gradient, pattern, or image fill. |
| parentLevel.label.fillOpacity | Opacity |  | The opacity of the fill colour. |
| parentLevel.label.format | string \| AgTimeAxisFormattableLabelUnitFormat |  | Format string used when rendering labels. A format string, or an object specifying a format per time unit. |
| parentLevel.tick | AgAxisBaseTickOptions |  | Configuration for the axis ticks. |
| parentLevel.tick.enabled | boolean |  | Set to `false` to hide the axis ticks. |
| parentLevel.tick.width | PixelSize |  | The width in pixels of the axis ticks. |
| parentLevel.tick.size | PixelSize |  | The length in pixels of the axis ticks. |
| parentLevel.tick.stroke | CssColor |  | The colour of the axis ticks. |
| unit | AgTimeInterval \| AgTimeIntervalUnit |  | The size of each band. A unit keyword (or number), or an object describing the interval. |
| interval | AgAxisDiscreteTimeIntervalOptions |  | Configuration for the axis ticks interval. |
| interval.placement | 'on' \| 'between' | 'between' | Placement of ticks and labels relative to the time interval. |
| interval.step | AgTimeInterval \| AgTimeIntervalUnit \| number |  | The axis interval. Expressed in the units of the axis. If the configured interval results in too many items given the chart size, it will be ignored. `bigint` steps are accepted but precision is limited to the Number range. |
| interval.maxSpacing | PixelSize |  | Maximum gap in pixels between items. |
| interval.values | any[] |  | Array of values in axis units for specified intervals along the axis. The values in this array must be compatible with the axis type. |
| interval.minSpacing | PixelSize |  | Minimum gap in pixels between intervals. |
| paddingInner | Ratio |  | The size of the gap between the categories as a proportion, between 0 and 1. This value is a fraction of the “step”, which is the interval between the start of a band and the start of the next band. |
| paddingOuter | Ratio |  | The padding on the outside i.e. left and right of the first and last category. In association with `paddingInner`, this value can be between 0 and 1. |
| groupPaddingInner | Ratio |  | This property is for grouped column/bar series plotted on a category axis. It is a proportion between 0 and 1 which determines the size of the gap between the bars or columns within a single group along the axis. |
| bandHighlight | AgBandHighlightOptions |  | Configuration for the axis band highlight. |
| bandHighlight.enabled | boolean |  | Whether to show the band highlight. |
| bandHighlight.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour of the stroke for the lines. A colour string, or a theme-colour reference object. |
| bandHighlight.strokeWidth | PixelSize |  | The width in pixels of the stroke for the lines. |
| bandHighlight.strokeOpacity | Opacity |  | The opacity of the stroke for the lines. |
| bandHighlight.lineDash | PixelSize[] |  | Defines how the line stroke is rendered. Every number in the array specifies the length in pixels of alternating dashes and gaps. For example, `[6, 3]` means dashes with a length of `6` pixels with gaps between of `3` pixels. |
| bandHighlight.lineDashOffset | PixelSize |  | The initial offset of the dashed line in pixels. |
| bandHighlight.fill | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor \| AgGradientColor \| AgPatternColor \| AgImageFill |  | The colour to use for the fill of the band. A colour string, or an object for a gradient, pattern, or image fill. |
| bandHighlight.fillOpacity | Opacity |  | The opacity of the fill for the band. |
| bandAlignment | 'justify' \| 'start' \| 'center' \| 'end' | 'justify' | The alignment of bands when used with bar-like series with fixed widths. |
| skipNullBars | boolean | false | Set to `true` to prevent bars with `null`, `undefined` or missing values from taking up space in each category. |
| position | 'top' \| 'right' \| 'bottom' \| 'left' |  | The position on the chart where the axis should be rendered. |
| crossAt | AgCartesianAxisCrossAt |  | Value on the first perpendicular axis' domain where this axis should intersect. |
| crossAt.value (required) | number \| Date \| string \| string[] |  | The value on the perpendicular axis' domain where this axis should intersect. |
| crossAt.sticky | boolean | true | Whether the axis should remain visible when the cross position is outside the perpendicular axis domain. |
| thickness | PixelSize |  | Sets the axis thickness regardless of its content. |
| maxThicknessRatio | Ratio | 0.3 | The maximum thickness of the axis, as a ratio of the chart's width or height depending on axis direction. Used to prevent the axis from growing too large when labels or content are oversized. |
| title | AgCartesianAxisCaptionOptions |  | Configuration for the title shown next to the axis. |
| title.orientation | 'horizontal' \| 'vertical' \| 'vertical-reversed' |  | Orientation of the title.  Default: aligned with the axis line (`'horizontal'` on the x-axis, `'vertical'` on the y-axis). |
| title.enabled | boolean |  | Whether the title should be shown. |
| title.text | string |  | The text to show in the title. |
| title.fontStyle | FontStyle |  | The font style to use for the title. |
| title.fontWeight | FontWeight |  | The font weight to use for the title. |
| title.fontSize | FontSize |  | The font size in pixels to use for the title. |
| title.fontFamily | FontFamily \| GoogleFontFamily \| Array<FontFamily \| GoogleFontFamily> |  | The font family to use for the title. A single family name, or an array of names used as fallbacks. |
| title.color | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour to use for the title. A colour string, or a theme-colour reference object. |
| title.spacing | PixelSize |  | Spacing between the axis labels and the axis title. |
| title.maxWidth | PixelSize |  | Used to constrain the size of the title along the text direction before wrapping or truncation. |
| title.maxHeight | PixelSize |  | Used to constrain the size of the title across the text direction before wrapping or truncation. |
| title.wrapping | 'never' \| 'always' \| 'hyphenate' \| 'on-space' | 'always' | Text wrapping strategy for long text. - `'always'` will always wrap text to fit within the `maxWidth`. - `'hyphenate'` is similar to `'always'`, but inserts a hyphen (`-`) if forced to wrap in the middle of a word. - `'on-space'` will only wrap on white space. If there is no possibility to wrap a line on space and satisfy the `maxWidth`, the text will be truncated. - `'never'` disables text wrapping. |
| title.truncate | boolean | true | Whether the title text should be automatically truncated to fit the available axis length. |
| title.formatter | RichFormatter |  | Formatter to allow dynamic axis title calculation. |
| crosshair | AgCrosshairOptions |  | Configuration for the axis crosshair. |
| crosshair.enabled | boolean |  | Whether to show the crosshair. |
| crosshair.snap | boolean |  | When true, the crosshair snaps to the highlighted data point. By default this property is true. |
| crosshair.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour of the stroke for the lines. A colour string, or a theme-colour reference object. |
| crosshair.strokeWidth | PixelSize |  | The width in pixels of the stroke for the lines. |
| crosshair.strokeOpacity | Opacity |  | The opacity of the stroke for the lines. |
| crosshair.lineDash | PixelSize[] |  | Defines how the line stroke is rendered. Every number in the array specifies the length in pixels of alternating dashes and gaps. For example, `[6, 3]` means dashes with a length of `6` pixels with gaps between of `3` pixels. |
| crosshair.lineDashOffset | PixelSize |  | The initial offset of the dashed line in pixels. |
| crosshair.label | AgCrosshairLabel |  | The crosshair label configuration |
| crosshair.label.format | TFormat |  | Format string used when rendering labels. |
| crosshair.label.enabled | boolean |  | Whether to show label when the crosshair is visible. |
| crosshair.label.xOffset | PixelSize |  | The horizontal offset in pixels for the label. |
| crosshair.label.yOffset | PixelSize |  | The vertical offset in pixels for the label. |
| crosshair.label.formatter | Formatter |  | Function used to render crosshair labels. If `value` is a number, `fractionDigits` will also be provided, which indicates the number of fractional digits used in the step between ticks; for example, a tick step of `0.0005` would have `fractionDigits` set to `4` |
| crosshair.label.renderer | Renderer |  | Function used to create the content for the label. |
| context | ContextDefault |  | Context object to use in callbacks. |
| reverse | boolean |  | Reverse the axis scale domain if `true`. |
| line | AgAxisLineOptions |  | Configuration for the axis line. |
| line.enabled | boolean |  | Set to `false` to hide the axis line. |
| line.width | PixelSize |  | The width in pixels of the axis line. |
| line.stroke | CssColor |  | The colour of the axis line. |
| gridLine | AgAxisGridLineOptions |  | Configuration for the axis grid lines. |
| gridLine.enabled | boolean |  | Set to `false` to hide the axis grid lines. |
| gridLine.width | PixelSize |  | The width in pixels of the axis grid lines. |
| gridLine.style | AgAxisGridStyle[] |  | Configuration of the lines used to form the grid in the chart series area. |
| gridLine.style.fill | CssColor |  | The colour of the fill between grid lines. |
| gridLine.style.fillOpacity | Ratio |  | The opacity of the fill between grid lines. |
| gridLine.style.stroke | CssColor |  | The colour of the grid line. |
| gridLine.style.strokeWidth | PixelSize |  | The width of the grid line in pixels. |
| gridLine.style.lineDash | PixelSize[] |  | Defines how the grid lines are rendered. Every number in the array specifies the length in pixels of alternating dashes and gaps. For example, `[6, 3]` means dashes with a length of `6` pixels with gaps between of `3` pixels. |
| label | AgCartesianTimeAxisLabelOptions |  | Configuration for the axis labels, shown next to the ticks. |
| label.autoRotate | boolean |  | If specified and axis labels may collide, they are rotated so that they are positioned at the supplied angle. This is enabled by default for category. If the `rotation` property is specified, it takes precedence. |
| label.autoRotateAngle | Degree |  | If autoRotate is enabled, specifies the rotation angle to use when autoRotate is activated. Defaults to an angle of 335 degrees if unspecified. |
| label.wrapping | 'never' \| 'always' \| 'hyphenate' \| 'on-space' | 'on-space' | Text wrapping strategy for long text. - `'always'` will always wrap text to fit within the `maxWidth`. - `'hyphenate'` is similar to `'always'`, but inserts a hyphen (`-`) if forced to wrap in the middle of a word. - `'on-space'` will only wrap on white space. If there is no possibility to wrap a line on space and satisfy the `maxWidth`, the text will be truncated. - `'never'` disables text wrapping. |
| label.truncate | boolean |  | If truncate is enabled, the text will be truncated to fit available space and an ellipsis (`...`) will be added at the end of the text. |
| label.enabled | boolean |  | Set to `false` to hide the axis labels. |
| label.rotation | Degree |  | The rotation of the axis labels in degrees. Note: for integrated charts the default is 335 degrees, unless the axis shows grouped or default categories (indexes). The first row of labels in a grouped category axis is rotated perpendicular to the axis line. |
| label.avoidCollisions | boolean |  | Avoid axis label collision by automatically reducing the number of ticks displayed. If set to `false`, axis labels may collide. |
| label.minSpacing | PixelSize |  | Minimum gap in pixels between the axis labels before being removed to avoid collisions. |
| label.formatter | RichFormatter |  | Function used to render axis labels. If `value` is a number, `fractionDigits` will also be provided, which indicates the number of fractional digits used in the step between ticks; for example, a tick step of `0.0005` would have `fractionDigits` set to `4` |
| label.itemStyler | Styler |  | Function used to style axis labels. |
| label.fontStyle | FontStyle |  | The font style to use for the labels. |
| label.fontWeight | FontWeight |  | The font weight to use for the labels. |
| label.fontSize | FontSize |  | The font size in pixels to use for the labels. |
| label.fontFamily | FontFamily \| GoogleFontFamily \| Array<FontFamily \| GoogleFontFamily> |  | The font family to use for the labels. A single family name, or an array of names used as fallbacks. |
| label.spacing | PixelSize |  | Spacing in pixels between the axis label and the tick. |
| label.color | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour to use for the labels. A colour string, or a theme-colour reference object. |
| label.border | BorderOptions |  | Stroke options for the box border. |
| label.border.enabled | boolean |  | Whether the associated elements and properties should be used in the chart. |
| label.border.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour for the stroke. |
| label.border.strokeWidth | PixelSize |  | The width of the stroke in pixels. |
| label.border.strokeOpacity | Opacity |  | The opacity of the stroke colour. |
| label.cornerRadius | PixelSize |  | Apply rounded corners to the label box. |
| label.padding | PixelSize \| PaddingOptions |  | Distance between the label text and the border. A number applies uniform padding; an object sets each side. |
| label.fill | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor \| AgGradientColor \| AgPatternColor \| AgImageFill |  | The colour for filling shapes. A colour string, or an object for a gradient, pattern, or image fill. |
| label.fillOpacity | Opacity |  | The opacity of the fill colour. |
| label.format | string \| AgTimeAxisFormattableLabelUnitFormat |  | Format string used when rendering labels. A format string, or an object specifying a format per time unit. |
| tick | AgAxisBaseTickOptions |  | Configuration for the axis ticks. |
| tick.enabled | boolean |  | Set to `false` to hide the axis ticks. |
| tick.width | PixelSize |  | The width in pixels of the axis ticks. |
| tick.size | PixelSize |  | The length in pixels of the axis ticks. |
| tick.stroke | CssColor |  | The colour of the axis ticks. |
| min | Date \| number \| bigint \| string |  | The min value for the axis domain. |
| max | Date \| number \| bigint \| string |  | The max value for the axis domain. |
| preferredMin | Date \| number \| bigint \| string |  | The min value for the axis, unless extended by the series data or `nice` option. |
| preferredMax | Date \| number \| bigint \| string |  | The max value for the axis, unless extended by the series data or `nice` option. |

#### Ordinal Time Axis

| Property | Type | Default | Description |
| --- | --- | --- | --- |
| type | 'ordinal-time' |  | Axis type identifier. |
| crossLines | Array<AgLineCrossLineOptions \| AgRangeCrossLineOptions> |  | Add cross-lines or regions corresponding to data values. |
| parentLevel | AgTimeAxisParentLevel |  | Options for labels and ticks for the parent level intervals. |
| parentLevel.enabled | boolean |  | Enables parent level labels and ticks. |
| parentLevel.label | AgCartesianTimeAxisLabelOptions |  | Configuration for the axis labels, shown next to the ticks. |
| parentLevel.label.autoRotate | boolean |  | If specified and axis labels may collide, they are rotated so that they are positioned at the supplied angle. This is enabled by default for category. If the `rotation` property is specified, it takes precedence. |
| parentLevel.label.autoRotateAngle | Degree |  | If autoRotate is enabled, specifies the rotation angle to use when autoRotate is activated. Defaults to an angle of 335 degrees if unspecified. |
| parentLevel.label.wrapping | 'never' \| 'always' \| 'hyphenate' \| 'on-space' | 'on-space' | Text wrapping strategy for long text. - `'always'` will always wrap text to fit within the `maxWidth`. - `'hyphenate'` is similar to `'always'`, but inserts a hyphen (`-`) if forced to wrap in the middle of a word. - `'on-space'` will only wrap on white space. If there is no possibility to wrap a line on space and satisfy the `maxWidth`, the text will be truncated. - `'never'` disables text wrapping. |
| parentLevel.label.truncate | boolean |  | If truncate is enabled, the text will be truncated to fit available space and an ellipsis (`...`) will be added at the end of the text. |
| parentLevel.label.enabled | boolean |  | Set to `false` to hide the axis labels. |
| parentLevel.label.rotation | Degree |  | The rotation of the axis labels in degrees. Note: for integrated charts the default is 335 degrees, unless the axis shows grouped or default categories (indexes). The first row of labels in a grouped category axis is rotated perpendicular to the axis line. |
| parentLevel.label.avoidCollisions | boolean |  | Avoid axis label collision by automatically reducing the number of ticks displayed. If set to `false`, axis labels may collide. |
| parentLevel.label.minSpacing | PixelSize |  | Minimum gap in pixels between the axis labels before being removed to avoid collisions. |
| parentLevel.label.formatter | RichFormatter |  | Function used to render axis labels. If `value` is a number, `fractionDigits` will also be provided, which indicates the number of fractional digits used in the step between ticks; for example, a tick step of `0.0005` would have `fractionDigits` set to `4` |
| parentLevel.label.itemStyler | Styler |  | Function used to style axis labels. |
| parentLevel.label.fontStyle | FontStyle |  | The font style to use for the labels. |
| parentLevel.label.fontWeight | FontWeight |  | The font weight to use for the labels. |
| parentLevel.label.fontSize | FontSize |  | The font size in pixels to use for the labels. |
| parentLevel.label.fontFamily | FontFamily \| GoogleFontFamily \| Array<FontFamily \| GoogleFontFamily> |  | The font family to use for the labels. A single family name, or an array of names used as fallbacks. |
| parentLevel.label.spacing | PixelSize |  | Spacing in pixels between the axis label and the tick. |
| parentLevel.label.color | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour to use for the labels. A colour string, or a theme-colour reference object. |
| parentLevel.label.border | BorderOptions |  | Stroke options for the box border. |
| parentLevel.label.border.enabled | boolean |  | Whether the associated elements and properties should be used in the chart. |
| parentLevel.label.border.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour for the stroke. |
| parentLevel.label.border.strokeWidth | PixelSize |  | The width of the stroke in pixels. |
| parentLevel.label.border.strokeOpacity | Opacity |  | The opacity of the stroke colour. |
| parentLevel.label.cornerRadius | PixelSize |  | Apply rounded corners to the label box. |
| parentLevel.label.padding | PixelSize \| PaddingOptions |  | Distance between the label text and the border. A number applies uniform padding; an object sets each side. |
| parentLevel.label.fill | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor \| AgGradientColor \| AgPatternColor \| AgImageFill |  | The colour for filling shapes. A colour string, or an object for a gradient, pattern, or image fill. |
| parentLevel.label.fillOpacity | Opacity |  | The opacity of the fill colour. |
| parentLevel.label.format | string \| AgTimeAxisFormattableLabelUnitFormat |  | Format string used when rendering labels. A format string, or an object specifying a format per time unit. |
| parentLevel.tick | AgAxisBaseTickOptions |  | Configuration for the axis ticks. |
| parentLevel.tick.enabled | boolean |  | Set to `false` to hide the axis ticks. |
| parentLevel.tick.width | PixelSize |  | The width in pixels of the axis ticks. |
| parentLevel.tick.size | PixelSize |  | The length in pixels of the axis ticks. |
| parentLevel.tick.stroke | CssColor |  | The colour of the axis ticks. |
| interval | AgAxisDiscreteTimeIntervalOptions |  | Configuration for the axis ticks interval. |
| interval.placement | 'on' \| 'between' | 'between' | Placement of ticks and labels relative to the time interval. |
| interval.step | AgTimeInterval \| AgTimeIntervalUnit \| number |  | The axis interval. Expressed in the units of the axis. If the configured interval results in too many items given the chart size, it will be ignored. `bigint` steps are accepted but precision is limited to the Number range. |
| interval.maxSpacing | PixelSize |  | Maximum gap in pixels between items. |
| interval.values | any[] |  | Array of values in axis units for specified intervals along the axis. The values in this array must be compatible with the axis type. |
| interval.minSpacing | PixelSize |  | Minimum gap in pixels between intervals. |
| paddingInner | Ratio |  | The size of the gap between the categories as a proportion, between 0 and 1. This value is a fraction of the “step”, which is the interval between the start of a band and the start of the next band. |
| paddingOuter | Ratio |  | The padding on the outside i.e. left and right of the first and last category. In association with `paddingInner`, this value can be between 0 and 1. |
| groupPaddingInner | Ratio |  | This property is for grouped column/bar series plotted on a category axis. It is a proportion between 0 and 1 which determines the size of the gap between the bars or columns within a single group along the axis. |
| bandHighlight | AgBandHighlightOptions |  | Configuration for the axis band highlight. |
| bandHighlight.enabled | boolean |  | Whether to show the band highlight. |
| bandHighlight.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour of the stroke for the lines. A colour string, or a theme-colour reference object. |
| bandHighlight.strokeWidth | PixelSize |  | The width in pixels of the stroke for the lines. |
| bandHighlight.strokeOpacity | Opacity |  | The opacity of the stroke for the lines. |
| bandHighlight.lineDash | PixelSize[] |  | Defines how the line stroke is rendered. Every number in the array specifies the length in pixels of alternating dashes and gaps. For example, `[6, 3]` means dashes with a length of `6` pixels with gaps between of `3` pixels. |
| bandHighlight.lineDashOffset | PixelSize |  | The initial offset of the dashed line in pixels. |
| bandHighlight.fill | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor \| AgGradientColor \| AgPatternColor \| AgImageFill |  | The colour to use for the fill of the band. A colour string, or an object for a gradient, pattern, or image fill. |
| bandHighlight.fillOpacity | Opacity |  | The opacity of the fill for the band. |
| bandAlignment | 'justify' \| 'start' \| 'center' \| 'end' | 'justify' | The alignment of bands when used with bar-like series with fixed widths. |
| skipNullBars | boolean | false | Set to `true` to prevent bars with `null`, `undefined` or missing values from taking up space in each category. |
| position | 'top' \| 'right' \| 'bottom' \| 'left' |  | The position on the chart where the axis should be rendered. |
| crossAt | AgCartesianAxisCrossAt |  | Value on the first perpendicular axis' domain where this axis should intersect. |
| crossAt.value (required) | number \| Date \| string \| string[] |  | The value on the perpendicular axis' domain where this axis should intersect. |
| crossAt.sticky | boolean | true | Whether the axis should remain visible when the cross position is outside the perpendicular axis domain. |
| thickness | PixelSize |  | Sets the axis thickness regardless of its content. |
| maxThicknessRatio | Ratio | 0.3 | The maximum thickness of the axis, as a ratio of the chart's width or height depending on axis direction. Used to prevent the axis from growing too large when labels or content are oversized. |
| title | AgCartesianAxisCaptionOptions |  | Configuration for the title shown next to the axis. |
| title.orientation | 'horizontal' \| 'vertical' \| 'vertical-reversed' |  | Orientation of the title.  Default: aligned with the axis line (`'horizontal'` on the x-axis, `'vertical'` on the y-axis). |
| title.enabled | boolean |  | Whether the title should be shown. |
| title.text | string |  | The text to show in the title. |
| title.fontStyle | FontStyle |  | The font style to use for the title. |
| title.fontWeight | FontWeight |  | The font weight to use for the title. |
| title.fontSize | FontSize |  | The font size in pixels to use for the title. |
| title.fontFamily | FontFamily \| GoogleFontFamily \| Array<FontFamily \| GoogleFontFamily> |  | The font family to use for the title. A single family name, or an array of names used as fallbacks. |
| title.color | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour to use for the title. A colour string, or a theme-colour reference object. |
| title.spacing | PixelSize |  | Spacing between the axis labels and the axis title. |
| title.maxWidth | PixelSize |  | Used to constrain the size of the title along the text direction before wrapping or truncation. |
| title.maxHeight | PixelSize |  | Used to constrain the size of the title across the text direction before wrapping or truncation. |
| title.wrapping | 'never' \| 'always' \| 'hyphenate' \| 'on-space' | 'always' | Text wrapping strategy for long text. - `'always'` will always wrap text to fit within the `maxWidth`. - `'hyphenate'` is similar to `'always'`, but inserts a hyphen (`-`) if forced to wrap in the middle of a word. - `'on-space'` will only wrap on white space. If there is no possibility to wrap a line on space and satisfy the `maxWidth`, the text will be truncated. - `'never'` disables text wrapping. |
| title.truncate | boolean | true | Whether the title text should be automatically truncated to fit the available axis length. |
| title.formatter | RichFormatter |  | Formatter to allow dynamic axis title calculation. |
| crosshair | AgCrosshairOptions |  | Configuration for the axis crosshair. |
| crosshair.enabled | boolean |  | Whether to show the crosshair. |
| crosshair.snap | boolean |  | When true, the crosshair snaps to the highlighted data point. By default this property is true. |
| crosshair.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour of the stroke for the lines. A colour string, or a theme-colour reference object. |
| crosshair.strokeWidth | PixelSize |  | The width in pixels of the stroke for the lines. |
| crosshair.strokeOpacity | Opacity |  | The opacity of the stroke for the lines. |
| crosshair.lineDash | PixelSize[] |  | Defines how the line stroke is rendered. Every number in the array specifies the length in pixels of alternating dashes and gaps. For example, `[6, 3]` means dashes with a length of `6` pixels with gaps between of `3` pixels. |
| crosshair.lineDashOffset | PixelSize |  | The initial offset of the dashed line in pixels. |
| crosshair.label | AgCrosshairLabel |  | The crosshair label configuration |
| crosshair.label.format | TFormat |  | Format string used when rendering labels. |
| crosshair.label.enabled | boolean |  | Whether to show label when the crosshair is visible. |
| crosshair.label.xOffset | PixelSize |  | The horizontal offset in pixels for the label. |
| crosshair.label.yOffset | PixelSize |  | The vertical offset in pixels for the label. |
| crosshair.label.formatter | Formatter |  | Function used to render crosshair labels. If `value` is a number, `fractionDigits` will also be provided, which indicates the number of fractional digits used in the step between ticks; for example, a tick step of `0.0005` would have `fractionDigits` set to `4` |
| crosshair.label.renderer | Renderer |  | Function used to create the content for the label. |
| context | ContextDefault |  | Context object to use in callbacks. |
| reverse | boolean |  | Reverse the axis scale domain if `true`. |
| line | AgAxisLineOptions |  | Configuration for the axis line. |
| line.enabled | boolean |  | Set to `false` to hide the axis line. |
| line.width | PixelSize |  | The width in pixels of the axis line. |
| line.stroke | CssColor |  | The colour of the axis line. |
| gridLine | AgAxisGridLineOptions |  | Configuration for the axis grid lines. |
| gridLine.enabled | boolean |  | Set to `false` to hide the axis grid lines. |
| gridLine.width | PixelSize |  | The width in pixels of the axis grid lines. |
| gridLine.style | AgAxisGridStyle[] |  | Configuration of the lines used to form the grid in the chart series area. |
| gridLine.style.fill | CssColor |  | The colour of the fill between grid lines. |
| gridLine.style.fillOpacity | Ratio |  | The opacity of the fill between grid lines. |
| gridLine.style.stroke | CssColor |  | The colour of the grid line. |
| gridLine.style.strokeWidth | PixelSize |  | The width of the grid line in pixels. |
| gridLine.style.lineDash | PixelSize[] |  | Defines how the grid lines are rendered. Every number in the array specifies the length in pixels of alternating dashes and gaps. For example, `[6, 3]` means dashes with a length of `6` pixels with gaps between of `3` pixels. |
| label | AgCartesianTimeAxisLabelOptions |  | Configuration for the axis labels, shown next to the ticks. |
| label.autoRotate | boolean |  | If specified and axis labels may collide, they are rotated so that they are positioned at the supplied angle. This is enabled by default for category. If the `rotation` property is specified, it takes precedence. |
| label.autoRotateAngle | Degree |  | If autoRotate is enabled, specifies the rotation angle to use when autoRotate is activated. Defaults to an angle of 335 degrees if unspecified. |
| label.wrapping | 'never' \| 'always' \| 'hyphenate' \| 'on-space' | 'on-space' | Text wrapping strategy for long text. - `'always'` will always wrap text to fit within the `maxWidth`. - `'hyphenate'` is similar to `'always'`, but inserts a hyphen (`-`) if forced to wrap in the middle of a word. - `'on-space'` will only wrap on white space. If there is no possibility to wrap a line on space and satisfy the `maxWidth`, the text will be truncated. - `'never'` disables text wrapping. |
| label.truncate | boolean |  | If truncate is enabled, the text will be truncated to fit available space and an ellipsis (`...`) will be added at the end of the text. |
| label.enabled | boolean |  | Set to `false` to hide the axis labels. |
| label.rotation | Degree |  | The rotation of the axis labels in degrees. Note: for integrated charts the default is 335 degrees, unless the axis shows grouped or default categories (indexes). The first row of labels in a grouped category axis is rotated perpendicular to the axis line. |
| label.avoidCollisions | boolean |  | Avoid axis label collision by automatically reducing the number of ticks displayed. If set to `false`, axis labels may collide. |
| label.minSpacing | PixelSize |  | Minimum gap in pixels between the axis labels before being removed to avoid collisions. |
| label.formatter | RichFormatter |  | Function used to render axis labels. If `value` is a number, `fractionDigits` will also be provided, which indicates the number of fractional digits used in the step between ticks; for example, a tick step of `0.0005` would have `fractionDigits` set to `4` |
| label.itemStyler | Styler |  | Function used to style axis labels. |
| label.fontStyle | FontStyle |  | The font style to use for the labels. |
| label.fontWeight | FontWeight |  | The font weight to use for the labels. |
| label.fontSize | FontSize |  | The font size in pixels to use for the labels. |
| label.fontFamily | FontFamily \| GoogleFontFamily \| Array<FontFamily \| GoogleFontFamily> |  | The font family to use for the labels. A single family name, or an array of names used as fallbacks. |
| label.spacing | PixelSize |  | Spacing in pixels between the axis label and the tick. |
| label.color | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour to use for the labels. A colour string, or a theme-colour reference object. |
| label.border | BorderOptions |  | Stroke options for the box border. |
| label.border.enabled | boolean |  | Whether the associated elements and properties should be used in the chart. |
| label.border.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour for the stroke. |
| label.border.strokeWidth | PixelSize |  | The width of the stroke in pixels. |
| label.border.strokeOpacity | Opacity |  | The opacity of the stroke colour. |
| label.cornerRadius | PixelSize |  | Apply rounded corners to the label box. |
| label.padding | PixelSize \| PaddingOptions |  | Distance between the label text and the border. A number applies uniform padding; an object sets each side. |
| label.fill | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor \| AgGradientColor \| AgPatternColor \| AgImageFill |  | The colour for filling shapes. A colour string, or an object for a gradient, pattern, or image fill. |
| label.fillOpacity | Opacity |  | The opacity of the fill colour. |
| label.format | string \| AgTimeAxisFormattableLabelUnitFormat |  | Format string used when rendering labels. A format string, or an object specifying a format per time unit. |
| tick | AgAxisBaseTickOptions |  | Configuration for the axis ticks. |
| tick.enabled | boolean |  | Set to `false` to hide the axis ticks. |
| tick.width | PixelSize |  | The width in pixels of the axis ticks. |
| tick.size | PixelSize |  | The length in pixels of the axis ticks. |
| tick.stroke | CssColor |  | The colour of the axis ticks. |

#### Continuous Time Axis

| Property | Type | Default | Description |
| --- | --- | --- | --- |
| type | 'time' |  | Axis type identifier. |
| parentLevel | AgTimeAxisParentLevel |  | Options for labels and ticks for the parent level intervals. |
| parentLevel.enabled | boolean |  | Enables parent level labels and ticks. |
| parentLevel.label | AgCartesianTimeAxisLabelOptions |  | Configuration for the axis labels, shown next to the ticks. |
| parentLevel.label.autoRotate | boolean |  | If specified and axis labels may collide, they are rotated so that they are positioned at the supplied angle. This is enabled by default for category. If the `rotation` property is specified, it takes precedence. |
| parentLevel.label.autoRotateAngle | Degree |  | If autoRotate is enabled, specifies the rotation angle to use when autoRotate is activated. Defaults to an angle of 335 degrees if unspecified. |
| parentLevel.label.wrapping | 'never' \| 'always' \| 'hyphenate' \| 'on-space' | 'on-space' | Text wrapping strategy for long text. - `'always'` will always wrap text to fit within the `maxWidth`. - `'hyphenate'` is similar to `'always'`, but inserts a hyphen (`-`) if forced to wrap in the middle of a word. - `'on-space'` will only wrap on white space. If there is no possibility to wrap a line on space and satisfy the `maxWidth`, the text will be truncated. - `'never'` disables text wrapping. |
| parentLevel.label.truncate | boolean |  | If truncate is enabled, the text will be truncated to fit available space and an ellipsis (`...`) will be added at the end of the text. |
| parentLevel.label.enabled | boolean |  | Set to `false` to hide the axis labels. |
| parentLevel.label.rotation | Degree |  | The rotation of the axis labels in degrees. Note: for integrated charts the default is 335 degrees, unless the axis shows grouped or default categories (indexes). The first row of labels in a grouped category axis is rotated perpendicular to the axis line. |
| parentLevel.label.avoidCollisions | boolean |  | Avoid axis label collision by automatically reducing the number of ticks displayed. If set to `false`, axis labels may collide. |
| parentLevel.label.minSpacing | PixelSize |  | Minimum gap in pixels between the axis labels before being removed to avoid collisions. |
| parentLevel.label.formatter | RichFormatter |  | Function used to render axis labels. If `value` is a number, `fractionDigits` will also be provided, which indicates the number of fractional digits used in the step between ticks; for example, a tick step of `0.0005` would have `fractionDigits` set to `4` |
| parentLevel.label.itemStyler | Styler |  | Function used to style axis labels. |
| parentLevel.label.fontStyle | FontStyle |  | The font style to use for the labels. |
| parentLevel.label.fontWeight | FontWeight |  | The font weight to use for the labels. |
| parentLevel.label.fontSize | FontSize |  | The font size in pixels to use for the labels. |
| parentLevel.label.fontFamily | FontFamily \| GoogleFontFamily \| Array<FontFamily \| GoogleFontFamily> |  | The font family to use for the labels. A single family name, or an array of names used as fallbacks. |
| parentLevel.label.spacing | PixelSize |  | Spacing in pixels between the axis label and the tick. |
| parentLevel.label.color | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour to use for the labels. A colour string, or a theme-colour reference object. |
| parentLevel.label.border | BorderOptions |  | Stroke options for the box border. |
| parentLevel.label.border.enabled | boolean |  | Whether the associated elements and properties should be used in the chart. |
| parentLevel.label.border.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour for the stroke. |
| parentLevel.label.border.strokeWidth | PixelSize |  | The width of the stroke in pixels. |
| parentLevel.label.border.strokeOpacity | Opacity |  | The opacity of the stroke colour. |
| parentLevel.label.cornerRadius | PixelSize |  | Apply rounded corners to the label box. |
| parentLevel.label.padding | PixelSize \| PaddingOptions |  | Distance between the label text and the border. A number applies uniform padding; an object sets each side. |
| parentLevel.label.fill | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor \| AgGradientColor \| AgPatternColor \| AgImageFill |  | The colour for filling shapes. A colour string, or an object for a gradient, pattern, or image fill. |
| parentLevel.label.fillOpacity | Opacity |  | The opacity of the fill colour. |
| parentLevel.label.format | string \| AgTimeAxisFormattableLabelUnitFormat |  | Format string used when rendering labels. A format string, or an object specifying a format per time unit. |
| parentLevel.tick | AgAxisBaseTickOptions |  | Configuration for the axis ticks. |
| parentLevel.tick.enabled | boolean |  | Set to `false` to hide the axis ticks. |
| parentLevel.tick.width | PixelSize |  | The width in pixels of the axis ticks. |
| parentLevel.tick.size | PixelSize |  | The length in pixels of the axis ticks. |
| parentLevel.tick.stroke | CssColor |  | The colour of the axis ticks. |
| crossLines | Array<AgLineCrossLineOptions \| AgRangeCrossLineOptions> |  | Add cross-lines or regions corresponding to data values. |
| position | 'top' \| 'right' \| 'bottom' \| 'left' |  | The position on the chart where the axis should be rendered. |
| crossAt | AgCartesianAxisCrossAt |  | Value on the first perpendicular axis' domain where this axis should intersect. |
| crossAt.value (required) | number \| Date \| string \| string[] |  | The value on the perpendicular axis' domain where this axis should intersect. |
| crossAt.sticky | boolean | true | Whether the axis should remain visible when the cross position is outside the perpendicular axis domain. |
| thickness | PixelSize |  | Sets the axis thickness regardless of its content. |
| maxThicknessRatio | Ratio | 0.3 | The maximum thickness of the axis, as a ratio of the chart's width or height depending on axis direction. Used to prevent the axis from growing too large when labels or content are oversized. |
| title | AgCartesianAxisCaptionOptions |  | Configuration for the title shown next to the axis. |
| title.orientation | 'horizontal' \| 'vertical' \| 'vertical-reversed' |  | Orientation of the title.  Default: aligned with the axis line (`'horizontal'` on the x-axis, `'vertical'` on the y-axis). |
| title.enabled | boolean |  | Whether the title should be shown. |
| title.text | string |  | The text to show in the title. |
| title.fontStyle | FontStyle |  | The font style to use for the title. |
| title.fontWeight | FontWeight |  | The font weight to use for the title. |
| title.fontSize | FontSize |  | The font size in pixels to use for the title. |
| title.fontFamily | FontFamily \| GoogleFontFamily \| Array<FontFamily \| GoogleFontFamily> |  | The font family to use for the title. A single family name, or an array of names used as fallbacks. |
| title.color | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour to use for the title. A colour string, or a theme-colour reference object. |
| title.spacing | PixelSize |  | Spacing between the axis labels and the axis title. |
| title.maxWidth | PixelSize |  | Used to constrain the size of the title along the text direction before wrapping or truncation. |
| title.maxHeight | PixelSize |  | Used to constrain the size of the title across the text direction before wrapping or truncation. |
| title.wrapping | 'never' \| 'always' \| 'hyphenate' \| 'on-space' | 'always' | Text wrapping strategy for long text. - `'always'` will always wrap text to fit within the `maxWidth`. - `'hyphenate'` is similar to `'always'`, but inserts a hyphen (`-`) if forced to wrap in the middle of a word. - `'on-space'` will only wrap on white space. If there is no possibility to wrap a line on space and satisfy the `maxWidth`, the text will be truncated. - `'never'` disables text wrapping. |
| title.truncate | boolean | true | Whether the title text should be automatically truncated to fit the available axis length. |
| title.formatter | RichFormatter |  | Formatter to allow dynamic axis title calculation. |
| crosshair | AgCrosshairOptions |  | Configuration for the axis crosshair. |
| crosshair.enabled | boolean |  | Whether to show the crosshair. |
| crosshair.snap | boolean |  | When true, the crosshair snaps to the highlighted data point. By default this property is true. |
| crosshair.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour of the stroke for the lines. A colour string, or a theme-colour reference object. |
| crosshair.strokeWidth | PixelSize |  | The width in pixels of the stroke for the lines. |
| crosshair.strokeOpacity | Opacity |  | The opacity of the stroke for the lines. |
| crosshair.lineDash | PixelSize[] |  | Defines how the line stroke is rendered. Every number in the array specifies the length in pixels of alternating dashes and gaps. For example, `[6, 3]` means dashes with a length of `6` pixels with gaps between of `3` pixels. |
| crosshair.lineDashOffset | PixelSize |  | The initial offset of the dashed line in pixels. |
| crosshair.label | AgCrosshairLabel |  | The crosshair label configuration |
| crosshair.label.format | TFormat |  | Format string used when rendering labels. |
| crosshair.label.enabled | boolean |  | Whether to show label when the crosshair is visible. |
| crosshair.label.xOffset | PixelSize |  | The horizontal offset in pixels for the label. |
| crosshair.label.yOffset | PixelSize |  | The vertical offset in pixels for the label. |
| crosshair.label.formatter | Formatter |  | Function used to render crosshair labels. If `value` is a number, `fractionDigits` will also be provided, which indicates the number of fractional digits used in the step between ticks; for example, a tick step of `0.0005` would have `fractionDigits` set to `4` |
| crosshair.label.renderer | Renderer |  | Function used to create the content for the label. |
| context | ContextDefault |  | Context object to use in callbacks. |
| reverse | boolean |  | Reverse the axis scale domain if `true`. |
| line | AgAxisLineOptions |  | Configuration for the axis line. |
| line.enabled | boolean |  | Set to `false` to hide the axis line. |
| line.width | PixelSize |  | The width in pixels of the axis line. |
| line.stroke | CssColor |  | The colour of the axis line. |
| gridLine | AgAxisGridLineOptions |  | Configuration for the axis grid lines. |
| gridLine.enabled | boolean |  | Set to `false` to hide the axis grid lines. |
| gridLine.width | PixelSize |  | The width in pixels of the axis grid lines. |
| gridLine.style | AgAxisGridStyle[] |  | Configuration of the lines used to form the grid in the chart series area. |
| gridLine.style.fill | CssColor |  | The colour of the fill between grid lines. |
| gridLine.style.fillOpacity | Ratio |  | The opacity of the fill between grid lines. |
| gridLine.style.stroke | CssColor |  | The colour of the grid line. |
| gridLine.style.strokeWidth | PixelSize |  | The width of the grid line in pixels. |
| gridLine.style.lineDash | PixelSize[] |  | Defines how the grid lines are rendered. Every number in the array specifies the length in pixels of alternating dashes and gaps. For example, `[6, 3]` means dashes with a length of `6` pixels with gaps between of `3` pixels. |
| label | AgCartesianTimeAxisLabelOptions |  | Configuration for the axis labels, shown next to the ticks. |
| label.autoRotate | boolean |  | If specified and axis labels may collide, they are rotated so that they are positioned at the supplied angle. This is enabled by default for category. If the `rotation` property is specified, it takes precedence. |
| label.autoRotateAngle | Degree |  | If autoRotate is enabled, specifies the rotation angle to use when autoRotate is activated. Defaults to an angle of 335 degrees if unspecified. |
| label.wrapping | 'never' \| 'always' \| 'hyphenate' \| 'on-space' | 'on-space' | Text wrapping strategy for long text. - `'always'` will always wrap text to fit within the `maxWidth`. - `'hyphenate'` is similar to `'always'`, but inserts a hyphen (`-`) if forced to wrap in the middle of a word. - `'on-space'` will only wrap on white space. If there is no possibility to wrap a line on space and satisfy the `maxWidth`, the text will be truncated. - `'never'` disables text wrapping. |
| label.truncate | boolean |  | If truncate is enabled, the text will be truncated to fit available space and an ellipsis (`...`) will be added at the end of the text. |
| label.enabled | boolean |  | Set to `false` to hide the axis labels. |
| label.rotation | Degree |  | The rotation of the axis labels in degrees. Note: for integrated charts the default is 335 degrees, unless the axis shows grouped or default categories (indexes). The first row of labels in a grouped category axis is rotated perpendicular to the axis line. |
| label.avoidCollisions | boolean |  | Avoid axis label collision by automatically reducing the number of ticks displayed. If set to `false`, axis labels may collide. |
| label.minSpacing | PixelSize |  | Minimum gap in pixels between the axis labels before being removed to avoid collisions. |
| label.formatter | RichFormatter |  | Function used to render axis labels. If `value` is a number, `fractionDigits` will also be provided, which indicates the number of fractional digits used in the step between ticks; for example, a tick step of `0.0005` would have `fractionDigits` set to `4` |
| label.itemStyler | Styler |  | Function used to style axis labels. |
| label.fontStyle | FontStyle |  | The font style to use for the labels. |
| label.fontWeight | FontWeight |  | The font weight to use for the labels. |
| label.fontSize | FontSize |  | The font size in pixels to use for the labels. |
| label.fontFamily | FontFamily \| GoogleFontFamily \| Array<FontFamily \| GoogleFontFamily> |  | The font family to use for the labels. A single family name, or an array of names used as fallbacks. |
| label.spacing | PixelSize |  | Spacing in pixels between the axis label and the tick. |
| label.color | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour to use for the labels. A colour string, or a theme-colour reference object. |
| label.border | BorderOptions |  | Stroke options for the box border. |
| label.border.enabled | boolean |  | Whether the associated elements and properties should be used in the chart. |
| label.border.stroke | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor |  | The colour for the stroke. |
| label.border.strokeWidth | PixelSize |  | The width of the stroke in pixels. |
| label.border.strokeOpacity | Opacity |  | The opacity of the stroke colour. |
| label.cornerRadius | PixelSize |  | Apply rounded corners to the label box. |
| label.padding | PixelSize \| PaddingOptions |  | Distance between the label text and the border. A number applies uniform padding; an object sets each side. |
| label.fill | CssColor \| AgColorRef \| AgColorRefMixOnto \| AgColorRefMixOntoColor \| AgGradientColor \| AgPatternColor \| AgImageFill |  | The colour for filling shapes. A colour string, or an object for a gradient, pattern, or image fill. |
| label.fillOpacity | Opacity |  | The opacity of the fill colour. |
| label.format | string \| AgTimeAxisFormattableLabelUnitFormat |  | Format string used when rendering labels. A format string, or an object specifying a format per time unit. |
| tick | AgAxisBaseTickOptions |  | Configuration for the axis ticks. |
| tick.enabled | boolean |  | Set to `false` to hide the axis ticks. |
| tick.width | PixelSize |  | The width in pixels of the axis ticks. |
| tick.size | PixelSize |  | The length in pixels of the axis ticks. |
| tick.stroke | CssColor |  | The colour of the axis ticks. |
| nice | boolean |  | If `true`, the range will be rounded up to ensure nice equal spacing between the ticks.  __Note:__ This does not override the `min` or `max` options. |
| interval | AgAxisContinuousIntervalOptions |  | Configuration for the axis ticks interval. A unit keyword (or number), or an object describing the interval. |
| interval.step | AgTimeInterval \| AgTimeIntervalUnit \| number |  | The axis interval. Expressed in the units of the axis. If the configured interval results in too many items given the chart size, it will be ignored. `bigint` steps are accepted but precision is limited to the Number range. |
| interval.maxSpacing | PixelSize |  | Maximum gap in pixels between items. |
| interval.values | any[] |  | Array of values in axis units for specified intervals along the axis. The values in this array must be compatible with the axis type. |
| interval.minSpacing | PixelSize |  | Minimum gap in pixels between intervals. |
| min | Date \| number \| bigint \| string |  | The min value for the axis domain. |
| max | Date \| number \| bigint \| string |  | The max value for the axis domain. |
| preferredMin | Date \| number \| bigint \| string |  | The min value for the axis, unless extended by the series data or `nice` option. |
| preferredMax | Date \| number \| bigint \| string |  | The max value for the axis, unless extended by the series data or `nice` option. |

#### Time Interval

| Property | Type | Default | Description |
| --- | --- | --- | --- |
| unit (required) | 'millisecond' \| 'second' \| 'minute' \| 'hour' \| 'day' \| 'month' \| 'year' |  | The base duration of the time interval. |
| step | number |  | A multiplier of the `unit`.  For example, a unit of `'week'` and a step of `2` would be every two weeks. |
| epoch | Date |  | Defines the alignment of time interval.  For example, a unit of `'week'` with an epoch date of a Monday would be every Monday. |
| utc | boolean |  | Whether all dates should be in UTC, or local time. |
