我正在使用Highcharts的“不规则间隔的时间数据”图表。如您所知,当鼠标在线上移动时,格式化程序功能会运行并显示一些信息。我想知道鼠标在它上面移动的点的索引。因此,如果鼠标移动到该行的第一个点,则工具提示显示“1”,第二个点显示“2”,依此类推。日Thnx。
答案 0 :(得分:61)
这对我使用v2.2:
this.series.data.indexOf( this.point )
答案 1 :(得分:12)
一种方法是预处理数据以包含具有索引的属性。在Snow-depth示例中,您可以做这样的准备:
function prepare(dataArray) {
return dataArray.map(function (item, index) {
return {x: item[0], y: item[1], myIndex: index};
});
};
将[x, y]
的数组转换为{ x: x, y: y, myIndex: i}
之类的对象。然后很容易在格式化程序中获取该索引:
formatter: function() {
return 'point ' + this.point.myIndex;
}
上的示例
答案 2 :(得分:5)
对于记录,您可以直接以一种很好的方式进行记录
存储在:
this.points[0].point.x
答案 3 :(得分:2)
由于数据已排序,您可以使用binary search。
二进制搜索即使对于大量的点也应该表现良好(来自维基百科文章:“例如,搜索一百万个项目的列表需要多达一百万次线性搜索迭代,但永远不会更多比二十次迭代二次搜索。“
示例:
var bsComparator = function(a, b) {
if (a.x < b.x) { return -1; }
if (a.x > b.x) { return 1; }
return 0;
};
var binarySearch = function(series_data, point) {
var low = 0, high = series_data.length - 1,
i, comparison;
while (low <= high) {
i = Math.floor((low + high) / 2);
comparison = bsComparator(series_data[i], point);
if (comparison < 0) { low = i + 1; continue; }
if (comparison > 0) { high = i - 1; continue; }
return i;
}
return null;
};
tooltip: {
formatter: function() {
var pointIndex = binarySearch(this.series.data, this.point);
return "Point index: " + pointIndex;
}
}
(上面的binarySearch函数受http://www.dweebd.com/javascript/binary-search-an-array-in-javascript/启发)
答案 4 :(得分:1)
听起来你只需要xAxis值(即时间)。使用:
this.xData.indexOf(point.x)
this.points将被分组为更大的系列,因此需要通过点[0] ...点[n]进行更深入的搜索。
答案 5 :(得分:1)
在Highstock JS v4.2.4上,这一切对我有用:
var index = this.points[0].point.dataGroup.start;
答案 6 :(得分:0)
这就像它来的一样hacky,并且会因为很多积分而变慢,但它会起作用。一般的想法是查看系列数据中的所有点,直到找到与当前点匹配的点:
tooltip: {
formatter: function() {
for(var i=0;i<this.series.data.length;i++){
var item = this.series.data[i];
if(item.x == this.x && item.y == this.y)
return 'point ' + i;
}
return 'not found'
}
}
答案 7 :(得分:0)
如果您有权访问您的观点,那么您可以轻松访问,
this.point.index
或仅this.index
如果this
指的是自己的观点
访问其索引,
在我的情况下,我总是使用它,因为它比@Edgar解决方案更简单,这也很棒。