Using adapters on category axis labels
This demo shows how we can dynamically modify labels of the CategoryAxis using an adapter.
We need to add an adapter on an axis label template, which is accessible via axis’ renderer:
xAxis.get("renderer").labels.template.adapters.add("text", function(text, target) { if (target.dataItem && target.dataItem.dataContext) { return target.dataItem.dataContext.categoryLabel; } return text;});xAxis.get("renderer").labels.template.adapters.add("text", function(text, target) { if (target.dataItem && target.dataItem.dataContext) { return target.dataItem.dataContext.categoryLabel; } return text;});In this particular example, actual category name is being replaced with a different value extracted from data.
/** * --------------------------------------- * This demo was created using amCharts 5. * * For more information visit: * https://www.amcharts.com/ * * Documentation is available at: * https://www.amcharts.com/docs/v5/ * --------------------------------------- */
// Create root element// https://www.amcharts.com/docs/v5/getting-started/#Root_elementvar root = am5.Root.new("chartdiv");
// Set themes// https://www.amcharts.com/docs/v5/concepts/themes/root.setThemes([am5themes_Animated.new(root)]);
// Create chart// https://www.amcharts.com/docs/v5/charts/xy-chart/var chart = root.container.children.push( am5xy.XYChart.new(root, { panX: false, panY: false, wheelX: "panX", wheelY: "zoomX", layout: root.verticalLayout }));
// Add legend// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/var legend = chart.children.push( am5.Legend.new(root, { centerX: am5.p50, x: am5.p50 }));
var data = [ { category: "2021 - Q1", categoryLabel: "Q1", europe: 2.5, namerica: 2.5 }, { category: "2021 - Q2", categoryLabel: "Q2", europe: 2.6, namerica: 2.7 }, { category: "2021 - Q3", categoryLabel: "Q3", europe: 2.8, namerica: 2.9 }, { category: "2021 - Q4", categoryLabel: "Q4", europe: 2.1, namerica: 1.9 }, { category: "2022 - Q1", categoryLabel: "Q1", europe: 2.1, namerica: 2.9 }, { category: "2022 - Q2", categoryLabel: "Q2", europe: 1.6, namerica: 2.4 }, { category: "2022 - Q3", categoryLabel: "Q3", europe: 2.4, namerica: 2.1 }, { category: "2022 - Q4", categoryLabel: "Q4", europe: 1.9, namerica: 2.9 }];
// Create axes// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/var xAxis = chart.xAxes.push( am5xy.CategoryAxis.new(root, { categoryField: "category", renderer: am5xy.AxisRendererX.new(root, { cellStartLocation: 0.1, cellEndLocation: 0.9, minGridDistance: 30 }),
tooltip: am5.Tooltip.new(root, {}) }));
xAxis.get("renderer").labels.template.adapters.add("text", function (text, target) { if (target.dataItem && target.dataItem.dataContext) { return target.dataItem.dataContext.categoryLabel; } return text;});
xAxis.data.setAll(data);
var yAxis = chart.yAxes.push( am5xy.ValueAxis.new(root, { renderer: am5xy.AxisRendererY.new(root, {}) }));
// Add series// https://www.amcharts.com/docs/v5/charts/xy-chart/series/function makeSeries(name, fieldName) { var series = chart.series.push( am5xy.ColumnSeries.new(root, { name: name, xAxis: xAxis, yAxis: yAxis, valueYField: fieldName, categoryXField: "category" }) );
series.columns.template.setAll({ tooltipText: "{name}, {categoryX}:{valueY}", width: am5.percent(90), tooltipY: 0 });
series.bullets.push(function () { return am5.Bullet.new(root, { locationY: 0.5, sprite: am5.Label.new(root, { text: "{valueY}", fill: root.interfaceColors.get("alternativeText"), centerY: am5.p50, centerX: am5.p50, populateText: true }) }); });
series.data.setAll(data); series.appear(); legend.data.push(series);}
makeSeries("Europe", "europe");makeSeries("North America", "namerica");
function makeRange(start, end, label) { var rangeDataItem = xAxis.makeDataItem({ category: start, endCategory: end });
var range = xAxis.createAxisRange(rangeDataItem);
rangeDataItem.get("label").setAll({ fill: am5.color(0x000000), text: label, fontWeight: "bold", dy: 25 });
rangeDataItem.get("grid").setAll({ strokeOpacity: 0.2, location: 1 });}
makeRange("2021 - Q1", "2021 - Q4", "2021");makeRange("2022 - Q1", "2022 - Q4", "2022");
// Make stuff animate on load// https://www.amcharts.com/docs/v5/concepts/animations/chart.appear(1000, 100);<div id="chartdiv"></div>body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";}
#chartdiv { width: 100%; height: 95vh;}{ "type": "XYChart", "settings": { "panX": false, "panY": false, "wheelX": "panX", "wheelY": "zoomX", "layout": { "type": "VerticalLayout" } }, "properties": { "series": [ "#series-0", "#series-1" ], "xAxes": [ "#axis-0" ], "yAxes": [ "#axis-1" ] }, "children": [ { "type": "Legend", "settings": { "centerX": { "type": "Percent", "value": 50 }, "x": { "type": "Percent", "value": 50 } }, "properties": { "data": [ "#series-0", "#series-1" ] } } ], "refs": [ { "data-0": [ { "category": "2021 - Q1", "categoryLabel": "Q1", "europe": 2.5, "namerica": 2.5 }, { "category": "2021 - Q2", "categoryLabel": "Q2", "europe": 2.6, "namerica": 2.7 }, { "category": "2021 - Q3", "categoryLabel": "Q3", "europe": 2.8, "namerica": 2.9 }, { "category": "2021 - Q4", "categoryLabel": "Q4", "europe": 2.1, "namerica": 1.9 }, { "category": "2022 - Q1", "categoryLabel": "Q1", "europe": 2.1, "namerica": 2.9 }, { "category": "2022 - Q2", "categoryLabel": "Q2", "europe": 1.6, "namerica": 2.4 }, { "category": "2022 - Q3", "categoryLabel": "Q3", "europe": 2.4, "namerica": 2.1 }, { "category": "2022 - Q4", "categoryLabel": "Q4", "europe": 1.9, "namerica": 2.9 } ] }, { "axis-0": { "type": "CategoryAxis", "settings": { "categoryField": "category", "renderer": { "type": "AxisRendererX", "settings": { "cellStartLocation": 0.1, "cellEndLocation": 0.9, "minGridDistance": 30 } }, "tooltip": { "type": "Tooltip" } }, "properties": { "data": "#data-0" } } }, { "axis-1": { "type": "ValueAxis", "settings": { "renderer": { "type": "AxisRendererY" } } } }, { "series-0": { "type": "ColumnSeries", "settings": { "name": "Europe", "xAxis": "#axis-0", "yAxis": "#axis-1", "valueYField": "europe", "categoryXField": "category" }, "properties": { "data": "#data-0", "columns": { "properties": { "template": { "settings": { "tooltipText": "{name}, {categoryX}:{valueY}", "width": { "type": "Percent", "value": 90 }, "tooltipY": 0 } } } }, "bullets": [ { "type": "Bullet", "settings": { "locationY": 0.5, "sprite": { "type": "Label", "settings": { "text": "{valueY}", "fill": "@root.interfaceColors.get('alternativeText')", "centerY": { "type": "Percent", "value": 50 }, "centerX": { "type": "Percent", "value": 50 }, "populateText": true } } } } ] } } }, { "series-1": { "type": "ColumnSeries", "settings": { "name": "North America", "xAxis": "#axis-0", "yAxis": "#axis-1", "valueYField": "namerica", "categoryXField": "category" }, "properties": { "data": "#data-0", "columns": { "properties": { "template": { "settings": { "tooltipText": "{name}, {categoryX}:{valueY}", "width": { "type": "Percent", "value": 90 }, "tooltipY": 0 } } } }, "bullets": [ { "type": "Bullet", "settings": { "locationY": 0.5, "sprite": { "type": "Label", "settings": { "text": "{valueY}", "fill": "@root.interfaceColors.get('alternativeText')", "centerY": { "type": "Percent", "value": 50 }, "centerX": { "type": "Percent", "value": 50 }, "populateText": true } } } } ] } } }, { "axisRange-0": { "axis": "#axis-0", "settings": { "category": "2021 - Q1", "endCategory": "2021 - Q4", "label": { "type": "AxisLabel", "settings": { "text": "2021", "fill": { "type": "Color", "value": "#000000" }, "fontWeight": "bold", "dy": 25 } }, "grid": { "type": "Grid", "settings": { "location": 1, "strokeOpacity": 0.2 } } }, "__parseLogic": "axisRange" } }, { "axisRange-1": { "axis": "#axis-0", "settings": { "category": "2022 - Q1", "endCategory": "2022 - Q4", "label": { "type": "AxisLabel", "settings": { "text": "2022", "fill": { "type": "Color", "value": "#000000" }, "fontWeight": "bold", "dy": 25 } }, "grid": { "type": "Grid", "settings": { "location": 1, "strokeOpacity": 0.2 } } }, "__parseLogic": "axisRange" } } ]}using-adapaters-on-categoryaxis-labels