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();
    }
  }

}