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 に答える