d3js时间尺度相同但结果不同

时间:2014-01-14 15:49:58

标签: d3.js scale

我有两个重叠的图表。一个是条形图,一个是折线图。 每个数据都有一个日期(相同的日期 - 相同的结果计数)但是如果我计算每个图表的attr x,我会得到不同的结果。

var x = d3.time.scale().range([0, width]);

宽度= 860。 所以我在d3js代码中进行了非常深入的调试,并认识到以下内容:

如果我调用x(x(d.value)并进入它,我会看到以下代码:

    function d3_uninterpolateNumber(a, b) {
b = b - (a = +a) ? 1 / (b - a) : 0;
return function(x) {
  return (x - a) * b;
};
  }

我看到 x a 具有相同的值(x是日期(Tue Jul 2 00:00:00 UTC + 0200 2013)并且a是刻度线(772716000000 - >我的数据中第一个日期的刻度),如果是7月2日。

但是b有不同的价值观。所以我不知道b是什么。 在条形图的情况下,它是3.7947783849423196e-10,在LineChart的情况下,它是3.7947783849423196e-10 所以x(d.value)的结果是不同的,但它不应该是。

有人有想法吗? 我试着明天得到一个小提琴,但也许有人有没有js-fiddle的答案。

提前thx ©A-X-I

1 个答案:

答案 0 :(得分:0)

问题解决了。

要渲染条形图和折线图,我有两个不同的功能。在每个函数中,我都调用了x.domain。

仅限LineChart:

x.domain([d3.min(data, function (d) { return d.xValue; }), d3.max(data, function (d) { return d.xValue; })]);

但是在BarChart:

var xMax = d3.max(data, function (d) { return d.xValue; });
        xMax = new Date(xMax.toString()); // otherwise data[<last>].xValue is changed as well!
        if (ChartHandler.SelectedAggregationPeriod == ChartHandler.AggregationPeriod.month) {
            xMax.setTime(xMax.getTime() + 12 * 60 * 60 * 1000); //+12h
        }
 var xMin = d3.min(data, function (d) { return d.xValue; });

        x.domain([xMin, xMax]);

就是这样...... ©A-X-I