2

我在一个有 2 个不同系列的 HighCharts 设置上编写一个点击事件,一个在另一个之上。我希望该事件始终在顶部系列上显示一条消息,即使他们单击底部系列也是如此。

我正在使用以下代码:

chart = new Highcharts.StockChart({
  chart: {
    renderTo: 'container',
    events: {
      click: function(event) {
        // perform actions

        this.chart.series[1].setData([{
          x: event.point.x,
          y: ??
        }]);
      }

...

我想要做的是根据他们在图表上单击位置的 X 值使用第一个系列的 Y 值。如何根据此信息查找 Y 值?

基本上,如果我单击图表上的一个点,我如何仅根据它的 X 值在图表上查找一个系列中的一个点。

4

2 回答 2

7

系列对象有一个点对象数组,它基本上包含该系列中的所有点,一旦您从事件对象中获取给定系列的 xValue,您可以遍历这些点以找到最接近的点x并返回其对应的y

代码片段:

function getYValue(chartObj,seriesIndex,xValue){
 var yValue=null;
 var points=chartObj.series[seriesIndex].points;
 for(var i=0;i<points.length;i++){
    if(points[i].x>=xValue)break;
    yValue=points[i].y;
 }
 return yValue;    
}

用法:

 click:function(evt){
      var seriesIndex=1;
      var xAxisIndex=0;
      // All you need is the index of the series that you want
      // And the index of the xAxis bound to that series
      // default to 0 if you have only one series
      alert(getYValue(this,seriesIndex,evt.xAxis[xAxisIndex].value));
 }

小提琴@http ://jsfiddle.net/jugal/3MVGF/

于 2012-08-18T07:40:50.223 回答
0

这应该纠正一些带有负面点和点的错误xValue=0

function getyValue(chartObj,seriesIndex,xValue){
    var yValue=null;
    var points=chartObj.series[seriesIndex].points;
    for(var i=0;i<points.length;i++){
        if(points[i].x>xValue)
        {
            break;
        }
        else{
            if(points[i].x==xValue)
            {
                yValue=points[i].y;
                break;
            }
        }
        yValue=points[i].y;
    }
    return yValue;    
}
于 2013-09-07T19:25:26.277 回答