Category date axis

Category date axis (or evenly spaced date axis) is a mashup of a category axis and a date axis' features. It will display an evenly spaced cell for each entry in data. Perfect for displaying irregularly spaced time-based data, where plotting using real time scale is not important.

Creating

Since category date axis is functionally a category axis, it needs a categoryField setting, like a regular category axis.

It also needs data set on it, which it will use to grab dates-categories from.

let xAxis = chart.xAxes.push(
  am5xy.CategoryDateAxis.new(root, {
    categoryField: "date",
    renderer: am5xy.AxisRendererX.new(root, {})
  })
);

xAxis.data.setAll(data);
var xAxis = chart.xAxes.push(
  am5xy.CategoryDateAxis.new(root, {
    categoryField: "date",
    renderer: am5xy.AxisRendererX.new(root, {})
  })
);

xAxis.data.setAll(data);

For more information on how category axis relates to its data, please refer to "Category axis" tutorial.

Data granularity

For charts with date-based data, we need to specify its granularity via axes.

Just like on a date axis, it is set via baseInterval setting:

let xAxis = chart.xAxes.push(
  am5xy.CategoryDateAxis.new(root, {
    baseInterval: { timeUnit: "day", count: 1 },
    categoryField: "date",
    renderer: am5xy.AxisRendererX.new(root, {})
  })
);
var xAxis = chart.xAxes.push(
  am5xy.CategoryDateAxis.new(root, {
    baseInterval: { timeUnit: "day", count: 1 },
    categoryField: "date",
    renderer: am5xy.AxisRendererX.new(root, {})
  })
);

For a complete description on how it works how to configure data granularity, refer to "Date axis: Data granularity".

Grid granularity

Category date axis, just like date axis, chooses where to place grid based on minGridDistance setting and available space.

For a complete description on how it works and how to configure grid granularity, refer to "Date axis: Grid granularity" tutorial.

Date formats

Labels

Labels on a category date axis are formatted based on the time unit the grid is currently at.

Format for each time unit can be formatted via dateFormats and periodChangeDateFormats settings:

xAxis.get("dateFormats")["day"] = "d";
xAxis.get("periodChangeDateFormats")["day"] = "MMM";
xAxis.get("dateFormats")["day"] = "d";
xAxis.get("periodChangeDateFormats")["day"] = "MMM";

For more information on how labels are formatted and how to configure formats, refer to "Date axis: Labels".

Axis tooltip

Axis will use the date format suitable for the granularity of the data (as set via baseInterval) for its tooltip (when used with cursor).

We can override that format using using tooltipDateFormat setting:

let xAxis = chart.xAxes.push(
  am5xy.DateAxis.new(root, {
    baseInterval: { timeUnit: "day", count: 1 },
    categoryField: "date",
    tooltipDateFormat: "MMM d, yyyy",
    renderer: am5xy.AxisRendererX.new(root, {})
  })
);
var xAxis = chart.xAxes.push(
  am5xy.DateAxis.new(root, {
    baseInterval: { timeUnit: "day", count: 1 },
    categoryField: "date",
    tooltipDateFormat: "MMM d, yyyy",
    renderer: am5xy.AxisRendererX.new(root, {})
  })
);

Zooming

Zooming to date range

We can use date axis' method zoomToDates() to zoom the axis to specific date range:

xAxis.zoomToDates(new Date(2021, 0, 1), new Date(2022, 0, 1));
xAxis.zoomToDates(new Date(2021, 0, 1), new Date(2022, 0, 1));

Pre-zooming

Once data is loaded on some series the date axis gets its scope of dates from, we can use zoomToDates to pre-zoom it to some date range:

series.events.once("datavalidated", function(ev) {
  ev.target.get("xAxis").zoomToDates(new Date(2021, 0, 1), new Date(2022, 0, 1));
});
series.events.once("datavalidated", function(ev) {
  ev.target.get("xAxis").zoomToDates(new Date(2021, 0, 1), new Date(2022, 0, 1));
});

Read more about pre-zooming using series events in "Zoom and pan: Pre-zooming axes".

Data item grouping

Category date axis does not support dynamic data item grouping.