我有两个重叠的图表。一个是条形图,一个是折线图。 每个数据都有一个日期(相同的日期 - 相同的结果计数)但是如果我计算每个图表的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答案 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