我正在处理这个例子: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命令设置的范围内。因此它返回整个数据集中的第一个匹配实例。关闭,但没有雪茄。
还有其他想法吗?谢谢你的帮忙。
答案 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 ]
}