highcharts - 在向下钻取时重置 yAxis 最小值和最大值
问题描述
我见过类似的问题(即使标题相似),但没有一个能提供我需要的答案。
我有一个带有向下钻取的条形负堆栈图表。为了保持 Y 轴居中,我正在计算系列中的最大值并将其设置为图表的极值。
问题是我还没有找到一个放置这个逻辑的好地方。我已经尝试将它放在redraw
或render
事件上,但是由于我正在更改 yAxis,这会导致堆栈溢出。到目前为止,我所做的或多或少的工作是将drilldown
事件设置setTimeout
为延迟计算,否则它将在钻取之前获得值。我需要一些像drilldownFinish
.
这是这个向下钻取逻辑的工作小提琴(虽然不是在负条堆栈上):http: //jsfiddle.net/6qpq78do/
关于如何在没有 的情况下执行此操作的任何想法setTimeout
?
谢谢
解决方案
超出最大调用堆栈消息是由setExtremes
函数引起的。它的第三个参数是redraw
-true
默认情况下:https ://api.highcharts.com/class-reference/Highcharts.Axis#setExtremes
所以setExtremes
将redraw
再次调用该事件,该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/
推荐阅读
- excel - 我需要帮助将这些顺序 If 语句转换为更简洁的代码。(使用 Libre Office)
- python - 如何循环并显示错误消息,直到输入文件可以打开
- swift - 如何在 MPMediaItem 中正确添加音乐编译的谓词
- sass - 什么是 bootstrap 4 媒体断点上下和之间?
- nginx - 如何使用最低效率的 nginx 配置来防止 DDOS 攻击
- azure - 是否可以通过命令行与 javascript 聊天机器人交谈
- python - python速成课程19-1 博客编辑帖子不起作用
- c++ - C++ 中的“深拷贝”构造函数
- python - 获得“无”的输出,但不确定究竟是什么触发了它
- c - 是否可以在 C 中使用带有和操作的开关盒