Javascript 如何在没有循环的情况下捕获属于同一系列且具有相同xAxis值的所有点?

Javascript 如何在没有循环的情况下捕获属于同一系列且具有相同xAxis值的所有点?,javascript,highcharts,Javascript,Highcharts,我不知道这是否是Highcharts的一个bug,但我在图表上的同一个X轴上绘制同一系列中的两个值,我希望能够在工具提示中捕获同一X轴内的所有点。不幸的是,Highcharts给人的印象是,只有一点存在: 事实上,如果您将鼠标悬停在最左边的点上,并将光标移动到具有值1的中心点上,则值2的点将高亮显示,这就是Highcharts认为我正在悬停的点 我可以使用循环来确定哪些点也存在,但如果我使用共享工具提示,并且我的生产图表可以在许多不同的系列中绘制数百个点,我认为这将是一种资源密集型方法 使用以

我不知道这是否是Highcharts的一个bug,但我在图表上的同一个X轴上绘制同一系列中的两个值,我希望能够在工具提示中捕获同一X轴内的所有点。不幸的是,Highcharts给人的印象是,只有一点存在:

事实上,如果您将鼠标悬停在最左边的点上,并将光标移动到具有值
1
的中心点上,则值
2
的点将高亮显示,这就是Highcharts认为我正在悬停的点

我可以使用循环来确定哪些点也存在,但如果我使用共享工具提示,并且我的生产图表可以在许多不同的系列中绘制数百个点,我认为这将是一种资源密集型方法

使用以下系列数据生成上述图表:

series: [{
    data: [
        { x: 0, y: 1 }, { x: 1, y: 1 }, { x: 1, y: 2 }, { x: 2, y: 2 }
    ]
}]
我还定义了以下
工具提示
属性:

tooltip: {
    shared: true,
    formatter: function() {
        return "Points: " + this.points.length + "<br>Value: " + this.y;
    }
}
根本没有提到
{x:1,y:1}

如何在工具提示
{x:1,y:2}
点旁边捕获并显示此数据,而不必在每个系列中的每个点循环,以在工具提示格式化程序函数中找到类似点


更新 围绕此问题的另一个好例子是启用
allowPointSelect
:您无法单击
{x:1,y:1}
点-当您单击时,将选择
{x:1,y:2}


第1部分:选择最近的点

使用折线图,Highcharts仅根据点与鼠标之间的水平距离计算最近的点

这意味着一旦它建立了点树,给定两个具有相同x的点,它将始终返回它命中的第一个点

您可以替代该选项以使用到点的实际距离,如下所示:

series.kdComparer = 'distR';
然后它应该给你真正的最近点

更新:选择其他点

要在同一系列上获得具有相同x值的其他点,可以利用Highcharts k-d点树。搜索此点比搜索序列点快得多

这是一个更新的小提琴,它可以做到这一点。注意,即使没有按顺序声明匹配点,这仍然有效。它还允许您查找具有完全相同坐标的点


那么,如果
x
为1,则返回数组中的所有对象(格式化)?@Andy哪个数组?
this.points
数组只包含一个点:
{x:1,y:2}
@Andy我不想要整个数据数组。另请参见JSFIDLE链接上方的段落。这仍然不能改变另一点没有突出显示的事实。有趣的解决方案,虽然这确实适用于我在最后提到的
allowPointSelect
问题,它仍然不允许将两个点拉入同一个共享工具提示中-这是理想情况下我正在寻找的功能。我在问题中没有提到的另一个问题是,如果两个点具有完全相同的
x
y
值-我希望能够显示有多个出现,但不幸的是,这也不允许这种情况发生。