Copying extremes
by kzoon
HTML
<script src="https://code.highcharts.com/highcharts.js"></script>
<div style="display: flex;"">
<div id="container1" style="flex: 1;width: 400px;height: 500px"></div>
<div id="container2" style="flex: 1;width: 400px;height: 500px"></div>
</div>
JavaScript
const options = {
chart: {
type: 'line',
zoomType: 'xy'
},
yAxis: {
max: 220,
endOnTick: false,
events: {
afterSetExtremes: doAfterSetExtremesY
}
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
events: {
afterSetExtremes: doAfterSetExtremesX
}
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}]
};
const chart1 = Highcharts.chart('container1', options);
var chart2;
var userMaxY;
var userMinY;
var userMaxX;
var userMinX;
function doAfterSetExtremesY(e) {
if (this.chart === chart1) {
userMaxY = e.userMax;
userMinY = e.userMin;
displayChart2();
zoomChart2();
updateLabel(this.chart);
}
}
function doAfterSetExtremesX(e) {
if (this.chart === chart1) {
userMaxX = e.userMax;
userMinX = e.userMin;
displayChart2();
zoomChart2();
updateLabel(this.chart);
}
}
function updateLabel(myChart) {
if (myChart.xxxlbl) {
myChart.xxxlbl.destroy();
}
myChart.xxxlbl = myChart.renderer.label(
'userMax y: ' + userMaxY + '<br/>' +
'userMin y: ' + userMinY + '<br/>' +
'userMax x: ' + userMaxX + '<br/>' +
'userMin x: ' + userMinX + '<br/>',
100,
100
)
.attr({
fill: '#FCFFC5',
zIndex: 8
})
.add();
}
function displayChart2() {
if (chart2) {
chart2.destroy();
}
chart2 = Highcharts.chart('container2', options);
}
function zoomChart2() {
if (userMinY != undefined || userMaxY != undefined) {
chart2.yAxis[0].setExtremes(userMinY, userMaxY, true, false); //false: animate
if (!chart2.resetZoomButton) {
chart2.showResetZoom();
}
}
if (userMinX != undefined || userMaxX != undefined) {
chart2.xAxis[0].setExtremes(userMinX, userMaxX, true, false); //false: animate
if (!chart2.resetZoomButton) {
chart2.showResetZoom();
}
}
}