首页 > 解决方案 > 在向下钻取时重置 yAxis 最小值和最大值

问题描述

我见过类似的问题(即使标题相似),但没有一个能提供我需要的答案。

我有一个带有向下钻取的条形负堆栈图表。为了保持 Y 轴居中,我正在计算系列中的最大值并将其设置为图表的极值。

问题是我还没有找到一个放置这个逻辑的好地方。我已经尝试将它放在redrawrender事件上,但是由于我正在更改 yAxis,这会导致堆栈溢出。到目前为止,我所做的或多或少的工作是将drilldown事件设置setTimeout为延迟计算,否则它将在钻取之前获得值。我需要一些像drilldownFinish.

这是这个向下钻取逻辑的工作小提琴(虽然不是在负条堆栈上):http: //jsfiddle.net/6qpq78do/

关于如何在没有 的情况下执行此操作的任何想法setTimeout

谢谢

标签: highcharts

解决方案


超出最大调用堆栈消息是由setExtremes函数引起的。它的第三个参数是redraw-true默认情况下:https ://api.highcharts.com/class-reference/Highcharts.Axis#setExtremes

所以setExtremesredraw再次调用该事件,该redraw事件将调用setExtremes等等......

这里的解决方案是创建一个标志 ( redrawEnbaled) 来控制对放置在其中的逻辑的访问redrawEvent并防止这种无限递归循环:

var redrawEnabled = true;
(...)
events: {
  redraw: function() {

    if (redrawEnabled) {
      redrawEnabled = false;
      let values = [];

      this.series.forEach(s => {
        s.yData.forEach(v => values.push(Math.abs(v)));
      });
      let max = values.reduce((acc, val) => (acc > val) ? acc : val, 0);

      this.yAxis[0].setExtremes(-max, max);

      redrawEnabled = true;
    }

  }
}

现场演示:http: //jsfiddle.net/BlackLabel/zjuy21k5/


推荐阅读