Javascript 如何在HighCharts散点图上设置点的z指数?

Javascript 如何在HighCharts散点图上设置点的z指数?,javascript,charts,highcharts,Javascript,Charts,Highcharts,我用海图画了几百个点。每个点都有一个不透明度值,高亮显示时变为红色。然而,当我突出显示一些点时,很难看到它们,因为有点的过度绘制 我希望所选点清晰可见,如下所示: 我使用以下代码在图表上选择点: updateChart = function(x){ for (i=0; i<chart.series[0].data.length; i++){ if(chart.series[0].data[i].config[2] == x){

我用海图画了几百个点。每个点都有一个不透明度值,高亮显示时变为红色。然而,当我突出显示一些点时,很难看到它们,因为有点的过度绘制

我希望所选点清晰可见,如下所示:

我使用以下代码在图表上选择点:

updateChart = function(x){

    for (i=0; i<chart.series[0].data.length; i++){

        if(chart.series[0].data[i].config[2] == x){       
            chart.series[0].data[i].graphic.attr({'fill':'red', 'z-index':1000})
        }
        else{
            chart.series[0].data[i].graphic.attr('fill', 'rgba(0,255,0,0.6)')
        }        
    }
}
updateChart=函数(x){

对于(i=0;iHighcharts是由svg元素组成的,这些元素不受z-index之类的东西的直接控制。但是,-svg树中的最后一个元素是在其余元素上绘制的,因此要将元素提升到前面,您只需将其弹出,并附加到包含图表的svg元素。

不幸的是,每个点都没有zIndex属性但是就像前面提到的泡泡一样,你总是可以把点添加到末端,这样它就可以最后渲染,从而显示在顶部

此外,我建议利用highcharts的
状态:选择
选项,而不是循环遍历所有点并直接向元素添加样式。然后,您可以为所选状态设置特定样式,只需在要高亮显示的点上触发
选择()

    marker: {
        states: {
            select: {
                fillColor: '#00ff00'
            }
        }
    }
下面是如何通过将该点推到末尾并触发其上的
select()
来突出显示该点的方法

function highlightPoint(point){
    //save the point state to a new point
    var newPoint = {
        x: point.x,
        y: point.y
    };
    //remove the point
    point.remove();
    //add the new point at end of series
    chart.series[0].addPoint(newPoint);
    //select the last point
    chart.series[0].points[chart.series[0].points.length - 1].select();
}

截至2014年的更新 这是一个老问题,但我想我会从2014年开始更新highcharts。现在可以使用内置方法
Element.toFront()
,它会自动弹出并重新附加到顶部

在数据索引
i
处移动点的示例如下:

chart.series[0].data[i].graphic.toFront()
这就是一切


上述解决方案的细微差别,因为上述建议对我不起作用。我有一个例子,当区域重叠时,尽管工具提示显示,但工具提示的点在面积图中不可单击

它是通过在工具提示格式化程序中添加上面的解决方案,但将其添加到父组中来实现的

tooltip :{
   ...
   formatter () {
        this.point.graphic.parentGroup.toFront();
        ...
   }
}

我们可以摆弄JSFIDLE吗?谢谢你的建议-这很有意义,但我无法理解
图表的结构。series[0]。points
图表。series[0]
在Firebug.chart.series[0]中检查时没有属性
points
.points由highcharts在您调用新的highcharts.Chart(…);
检查后添加。我添加了以下日志,可以让您了解新的highcharts.Chart(chartingOptions);console.log(typeof Chart.series[0].points);console.log(Chart.series[0].points.length);
您应该在控制台中看到这两个日志。如果您在实际代码中没有看到类似的内容,请检查您可能使用的highcharts版本与我在@Celenius中使用的highcharts版本。我想知道是否区别在于使用HighStock与highcharts。这似乎是我在中看到的加载库的唯一区别您的示例。这对点如何工作?即,重新绘制当前选定的(通过单击或悬停)点,使其位于其他点的顶部?只需更新series>point>events>mouseOver属性,即可将函数用于此行:
this.graphic.toFront();