我在dygraphs上使用zoomcallback,但我有一个问题,即在回调中回显的最小值和最大值是有效插值。我需要将这些回调值映射到我已经散列x的原始数据集。
迭代我的原始数据集,寻找min的最接近的x值,y的最接近的值是不可行的。
任何人都知道如何获取图表的最小x和最大x可视部分的实际数据值?
答案 0 :(得分:1)
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);
}