放大JS HighCharts

时间:2015-04-29 17:40:35

标签: javascript highcharts

我正在处理这个例子:http://www.highcharts.com/demo/line-time-series

我手动调用缩放(修改后的图表有两个系列):

chart.xAxis[0].setExtremes(Date.UTC(2007,1,0), Date.UTC(2008,1,0))

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

maxInRange = chart.series[0].dataMax

但我无法弄清楚如何找到该点的日期/标签。我可以打电话和任意数据点:

chart.series[0].xData['222']

返回日期,但我正在寻找类似的东西:

chart.series[0].xData[maxInRange]

(不起作用)或类似的获取最大值的日期点。

欢呼并感谢您的帮助!

  • 更新哟! - 所以现在我认为这可能有用

首先通过以下方式查找dataMax值的索引:

maxDateY = chart.series[0].yData.indexOf(maxInRange)

将返回y数据中max的索引,然后将其传递给xdata,如下所示:

maxDateX = chart.series[0].xData[maxDateY]

所以这很酷,但不幸的是我不认为yData.indexOf调用被限制在setExtremes命令设置的范围内。因此它返回整个数据集中的第一个匹配实例。关闭,但没有雪茄。

还有其他想法吗?谢谢你的帮忙。

2 个答案:

答案 0 :(得分:2)

塞巴斯蒂安的解决方案很好。 要关注最大值并获得您可以使用的标签/日期:

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

答案 1 :(得分:0)

您可以在xAxis上捕获afterExtremes,然后迭代每个serie点,比较最小值/最大值。

/* 0 */
{
    "a" : [ 2, 3 ],
    "b" : [ 3, 2 ]
}

/* 1 */
{
    "a" : [ 32, 3 ],
    "b" : [ 123, 4 ]
}

/* 2 */
{
    "a" : [ 23, 2 ],
    "b" : [ 2, 32 ]
}

示例:http://jsfiddle.net/23brwuxb/1/