Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 放大JS HighCharts后获取最大值并按系列添加标签_Javascript_Highcharts - Fatal编程技术网

Javascript 放大JS HighCharts后获取最大值并按系列添加标签

Javascript 放大JS HighCharts后获取最大值并按系列添加标签,javascript,highcharts,Javascript,Highcharts,我正在研究这个例子: 我手动调用zoom(修改后的图表有两个系列),其中: 现在我想得到这个范围内序列的最大值,以及该点的标签/日期。我可以通过以下方式获得最大值: maxInRange = chart.series[0].dataMax 但我不知道如何找到该点的日期/标签。我可以调用和任意数据点: chart.series[0].xData['222'] 它返回了一个日期,但我在寻找类似于: chart.series[0].xData[maxInRange] (不起作用)或类似,以获取最

我正在研究这个例子:

我手动调用zoom(修改后的图表有两个系列),其中:

现在我想得到这个范围内序列的最大值,以及该点的标签/日期。我可以通过以下方式获得最大值:

maxInRange = chart.series[0].dataMax
但我不知道如何找到该点的日期/标签。我可以调用和任意数据点:

chart.series[0].xData['222']
它返回了一个日期,但我在寻找类似于:

chart.series[0].xData[maxInRange]
(不起作用)或类似,以获取最大值的日期点

干杯,谢谢你的帮助

  • 更新哟 所以现在我想这可能管用
首先通过以下方式找到dataMax值的索引:

maxDateY = chart.series[0].yData.indexOf(maxInRange)
它将返回最大值在y数据中的位置的索引,然后将其传递给扩展数据,如中所示:

maxDateX = chart.series[0].xData[maxDateY]
这很酷,但不幸的是,我不认为yData.indexOf调用被限制在setextrems命令设置的范围内。因此,它返回整个数据集中的第一个匹配实例。很近,但没有雪茄


还有其他想法吗?感谢您的帮助。

您可以在xAxis上捕捉afterSetExtremes,然后在系列的每个点上迭代,比较最小值/最大值

xAxis: {
        events:{
            afterSetExtremes:function() {
                var minAxis = this.min,
                    maxAxis = this.max,
                    points = this.chart.series[0].points,
                    min = points[0].y,
                    max = points[0].y;

                $.each(points, function(i, p) {
                    if(p.x >= minAxis && p.x <= maxAxis) {
                        if(p.y > max)
                            max = p.y;

                        if(p.y < min)
                            min = p.y;
                    }
                });

                $('#info').html('MIN: ' + min + ' MAX: ' + max);
            }
        },
        type: 'datetime',
        minRange: 14 * 24 * 3600000 // fourteen days
    },
xAxis:{
活动:{
AfterSetExtrems:函数(){
var minAxis=this.min,
maxAxis=this.max,
points=this.chart.series[0]。点,
最小值=点[0]。y,
最大值=点[0]。y;
$。每个(点、功能(i、p){
如果(p.x>=minAxis&&p.x max)
max=p.y;
如果(p.y

示例:

塞巴斯蒂安的解决方案效果很好。 要关注最大值并获取可使用的标签/日期,请执行以下操作:

events:{
                afterSetExtremes:function() {
                    var minAxis = this.min,
                        maxAxis = this.max,
                        points = this.chart.series[0].points,
                        max = points[0].y,
                        xValue = 0,
                        label = '';

                    $.each(points, function(i, p) {
                        if(p.x >= minAxis && p.x <= maxAxis) {
                            if(p.y > max) {
                                max = p.y;
                                xValue = p.x;
                            }
                        }
                        maxDate = new Date(maxAxis);
                    });
                    label = new Date(xValue);
                    $('#info').html(' MAX: ' + max + ' Label:' + label);
                }
            },
事件:{
AfterSetExtrems:函数(){
var minAxis=this.min,
maxAxis=this.max,
points=this.chart.series[0]。点,
最大值=点[0]。y,
xValue=0,
标签='';
$。每个(点、功能(i、p){
如果(p.x>=minAxis&&p.x max){
max=p.y;
xValue=p.x;
}
}
maxDate=新日期(maxAxis);
});
标签=新日期(xValue);
$('#info').html('MAX:'+MAX+'Label:'+Label);
}
},

谢谢!工作得很有魅力。作为对其他人的提醒,在xAxis中抛出以下groovy事件:{}。干杯此外,如果最大值恰好位于序列的第一个点,则为标签输入:,if(xValue==0){label=new Date(minAxis)}else{label=new Date(xValue);}有助于避免返回0或错误的1970年日期。
events:{
                afterSetExtremes:function() {
                    var minAxis = this.min,
                        maxAxis = this.max,
                        points = this.chart.series[0].points,
                        max = points[0].y,
                        xValue = 0,
                        label = '';

                    $.each(points, function(i, p) {
                        if(p.x >= minAxis && p.x <= maxAxis) {
                            if(p.y > max) {
                                max = p.y;
                                xValue = p.x;
                            }
                        }
                        maxDate = new Date(maxAxis);
                    });
                    label = new Date(xValue);
                    $('#info').html(' MAX: ' + max + ' Label:' + label);
                }
            },