2017-01-07 4 views
2

私はdygraphsでzoomcallbackを使用していますが、コールバックで戻された最小値と最大値が効果的に補間された値であるという問題があります。これらのコールバック値を私のxをハッシュした元のデータセットにマップする必要があります。zoomcallbackで最も近いmin xとmax xデータポイントを取得しますか?

minの最も近いx値とyの最も近い値を探している元のデータセットを反復することは実行可能ではありません。

グラフの最小xと最大x表示可能な部分にある実際のデータ値に到達する方法を知っている人は誰ですか?

答えて

0

dygraphs 2.0のgetRowForXメソッドは、あなたが望むものと似ていますが、正確にx値に一致する場合にのみインデックスを返します。バイナリ検索を使用して実装されています。不正確な試合のために最も近い行番号を取得するには、わずかな微調整が必​​要です。では

function getCloseRowForX(g, xVal) { 
    var low = 0, 
     high = g.numRows() - 1; 

    while (low <= high) { 
    var idx = (high + low) >> 1; 
    var x = g.getValue(idx, 0); 
    if (x < xVal) { 
     low = idx + 1; 
    } else if (x > xVal) { 
     high = idx - 1; 
    } else { 
     return idx; 
    } 
    } 

    return idx; 
}; 

をごzoomCallbackあなたはこのような何か行うことができます。

zoomCallback() { 
    const [leftX, rightX] = this.xAxisRange(); 
    const leftIndex = getCloseRowForX(this, leftX); 
    const rightIndex = getCloseRowForX(this, rightX); 
    const leftValue = this.getValue(leftIndex, seriesNum); 
    const rightValue = this.getValue(rightIndex, seriesNum); 
} 
関連する問題