2013-08-09 8 views
5

ハイチャートでプロットする必要があるポイントは数万(おそらく数十万)です。サーバー上のデータをクラスター化する方法はありますか?1000ポイント未満が表示されますが、ズームインするとサーバーにAJAX呼び出しが行われ、そのズームされた領域のデータが取得されます同じクラスタアルゴリズム)。 Highcharts APIとのこのインターフェースはどのようになっていますか?ハイチャート大きなデータセットクラスタリング

+0

私は、データを削除し、新しいデータを追加し、その後、AJAX呼び出し、ロード画面をポップアップし、その後、 'selected'イベントをキャッチする必要があります推測するが、どのようにズームだろうよこの方法はそれを説明しないためです。 – Ray

+1

実際、私はうまくいくと思う。軸が更新されるので、拡大を考慮すると思う。私は元のデータを表示するリセットズームボタンを表示する必要があります。 – Ray

答えて

2

はそれ、これはリセットズームイベントであるかどうかを知るためにsetExtremesイベント、 に登録し、

バーバラの答えのために改良したものです。 これは、データセット全体を取得したため、 がリセットされ、リセットズームが正しく機能するようになります。

xとyの両方のズームも可能です。

http://jsfiddle.net/DktpS/8/

var isReset = false; 

... 

      xAxis: { 
       events: { 
         afterSetExtremes : afterSetExtremes, 
        setExtremes: function (e) { 


         if (e.max == null || e.min == null) { 
          isReset = true;        
         } 
         else 
         { 
         isReset = false; 
         } 
        } 
       }, 
       minRange: 3600 * 1000 // one hour 
      }, 

      series: [{ 
       data: data, 
       dataGrouping: { 
        enabled: false 
       } 
      }] 
     }); 
    }); 
}); 


    /** 
    * Load new data depending on the selected min and max 
    */ 
    function afterSetExtremes(e) { 

     var url, 
     currentExtremes = this.getExtremes(), 
      range = e.max - e.min; 
     var chart = $('#container').highcharts(); 

     var min = 0; 
     var max = 1.35e12; 
     if(!isReset) 
     { 
      min = e.min; 
      max = e.max; 
     } 
     chart.showLoading('Loading data from server...'); 
     $.getJSON('http://www.highcharts.com/samples/data/from-sql.php?start=' + Math.round(min) + 
      '&end=' + Math.round(max) + '&callback=?', function (data) { 

      chart.series[0].setData(data); 

      chart.hideLoading(); 


     }); 

    } 
3

http://www.highcharts.com/stock/demo/lazy-loadingのハイストックデモがあります。 しかし、あなたはhighcharts http://jsfiddle.net/RHkgr/ と同じことを行うことができ、重要なビットを使用すると、ポイントの制限を持っていないとき、あなたはturboThreshold PARAMTERを増やすことができた場合

... 
      xAxis : { 
       events : { 
        afterSetExtremes : afterSetExtremes 
       }, 
... 


/** 
* Load new data depending on the selected min and max 
*/ 
function afterSetExtremes(e) { 

    var url, 
     currentExtremes = this.getExtremes(), 
     range = e.max - e.min; 
    var chart = $('#container').highcharts(); 
    chart.showLoading('Loading data from server...'); 
    $.getJSON('http://www.highcharts.com/samples/data/from-sql.php?start='+ Math.round(e.min) + 
      '&end='+ Math.round(e.max) +'&callback=?', function(data) { 

     chart.series[0].setData(data); 
     chart.hideLoading(); 
    }); 

} 
+1

もう1つの注意点は、jsfiddleが正しく機能しないことです。それは元のデータを再取得する必要があります – Ray

0

afterSetExtremes機能です。ここで

+0

私はそれを試して、IE8をサポートしなければならないので実用的ではありません: "( – Ray

+0

あなたはIE8でturbothresholdが機能しないということを意味しますか?jsfiddle.netであなたの例を再現できますか? –

+0

いいえ、IE8は多くのオブジェクトをうまく処理しません。スクリプトを強制終了する場合は、何度も尋ねられます。 – Ray

関連する問題