【发布时间】:2014-03-17 07:25:40
【问题描述】:
这是我的日期时间条形图。当我使用小提琴(参见here)尝试复制问题时,它按预期工作。 注意:从 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);
我在这里遗漏了一些明显的东西吗?如果没有,我应该从哪里开始调试?我花了相当多的时间在这个上,我找不到任何问题。
编辑:当我删除.xUnits 指令时,我会得到非常细的条形,但沿轴放置得很好。这使我认为条形宽度的计算有问题。我不知道如何调试该特定计算。如果有人知道,我很乐意深入研究。
EDIT2:svg 内的<g class="chart-body"><g class="stack _0"><rect class="bar"></rect></g></g> 元素的width 属性都设置为错误值。如果有人能指出这是在 d3 库中计算的位置,我也许可以从那里拿走。
EDIT3:我找到了问题的根源。条的宽度不正确,因为当 calculateBarWidth() 运行一次以实例化图形时,即使调用 dc.redrawAll() 它也不再运行。在我的情况下,我连续将记录块添加到我的交叉过滤器并重新绘制图表。新问题是“如何强制 calculateBarWidth() 重新运行?”
【问题讨论】:
-
你的非工作版本和工作的 jsfiddle 有什么区别?
-
没有差异。这就是让我发疯的原因。我什至通过重新下载确保来源相同。
-
您能否指出我在哪里计算了
<g class="chart-body"><g class="stack _0"><rect class="bar"></rect></g></g>的width属性,以便我可以看到它在 d3 中哪里出错了? -
可能是缺少一些 CSS?
-
@LarsKotthoff 感谢您的提示,但 css 也是如此:我直接指向
dc.js网站上使用的那个...
标签: javascript d3.js visualization data-visualization dc.js