Cha*_*apo 1 javascript visualization data-visualization d3.js dc.js

这是我的日期时间barChart.当我使用小提琴(见此处)尝试复制问题时,它按预期工作.注意:从github加载数据需要一段时间(~30秒).
以下是图表的代码:
pnlPerDaybarChart
.height(300)
.width(700)
.dimension(dims.date)
.group(groups.date.pnlSum)
.valueAccessor(function(d) {
return Math.abs(d.value);
})
.renderTitle(false)
.x(d3.time.scale().domain([minDate,maxDate]))
.xUnits(d3.time.days)
.colors(colorChoice)
.colorAccessor(function(d) {
if (+d.value>0) {
return("positive");
} else {
return("negative");
}
})
.brushOn(true)
.elasticY(true)
.margins({left: 70 ,top: 10, bottom: 30, right: 50})
.centerBar(true);
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗?如果没有,我应该开始调试的任何想法?我花了相当多的时间在这个上面,我找不到任何错误.
编辑:当我删除.xUnits指令时,我得到非常瘦的条,但沿着轴放置得很好.这让我觉得计算条形宽度有问题.我不知道如何调试那个特定的计算.如果有人知道,我会很乐意深入研究它.
EDIT2:所有元素的width属性都设置为错误的值.如果有人能指出我在图书馆计算的地方,我可以从那里拿走它.<g class="chart-body"><g class="stack _0"><rect class="bar"></rect></g></g>svgd3
EDIT3:我找到了问题的根源.条形的宽度不正确,因为当calculateBarWidth()运行一次以实例化图形时,即使调用dc.redrawAll(),它也不再运行.在我的情况下,我连续添加了大量的记录到我的crossfilter并重绘图表.新问题是'如何强制calculateBarWidth()重新运行?'
.on("preRedraw", function (chart) {
chart.rescale();
});
chart.on("preRender", function (chart) {
chart.rescale();
});
Run Code Online (Sandbox Code Playgroud)
答案来自这里.