This demo shows how we can sync zoom of an X-axes across multiple charts.
Code
The function that performs syncing:
function syncAxes(targetChart) {
let targetAxis = targetChart.xAxes.getIndex(0);
if (targetAxis._skipSync != true) {
let start = targetAxis.get("start");
let end = targetAxis.get("end");
am5.array.each(chartsToSync, function(chart) {
if (chart != targetChart) {
let axis = chart.xAxes.getIndex(0);
axis._skipSync = true;
axis.setAll({
start: start,
end: end
})
axis._skipSync = false;
}
});
}
}
function syncAxes(targetChart) {
var targetAxis = targetChart.xAxes.getIndex(0);
if (targetAxis._skipSync != true) {
var start = targetAxis.get("start");
var end = targetAxis.get("end");
am5.array.each(chartsToSync, function(chart) {
if (chart != targetChart) {
var axis = chart.xAxes.getIndex(0);
axis._skipSync = true;
axis.setAll({
start: start,
end: end
})
axis._skipSync = false;
}
});
}
}
Using events to monitor changes to start and end settings on each axis:
// Set up syncing
xAxis.on("start", function() {
syncAxes(chart);
});
xAxis.on("end", function() {
syncAxes(chart);
});
// Set up syncing
xAxis.on("start", function() {
syncAxes(chart);
});
xAxis.on("end", function() {
syncAxes(chart);
});
Demo
See the Pen Syncing axis zooms across multiple charts by amCharts team (@amcharts) on CodePen.