dc.js barChart条重叠

时间:2014-03-17 07:25:40

标签: javascript d3.js visualization data-visualization dc.js

the faulty graph

这是我的日期时间barChart。当我使用小提琴(参见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:width<g class="chart-body"><g class="stack _0"><rect class="bar"></rect></g></g>元素的svg属性都设置为错误的值。如果有人能指出我在d3库中计算的位置,我可以从那里拿走它。

EDIT3:我找到了问题的根源。条形的宽度不正确,因为当calculateBarWidth()运行一次以实例化图形时,即使调用dc.redrawAll(),它也不会再运行。在我的情况下,我连续添加了大量的记录到我的crossfilter并重绘图表。新问题是&#39;如何强制calculateBarWidth()重新运行?&#39;

2 个答案:

答案 0 :(得分:5)

.on("preRedraw", function (chart) {
        chart.rescale();
    });
    chart.on("preRender", function (chart) {
        chart.rescale();
    });

答案来自here

答案 1 :(得分:2)

我认为您正在寻找barChart.calculateBarWidth。 (src/bar-chart.js如果您正在考虑提交公关;)

最近报道的其他错误与序数条形图有关:

https://github.com/dc-js/dc.js/issues/533

我不知道日期是否还有错误。对我来说似乎很奇怪,相同的代码可以在小提琴中起作用但不在你的页面中......这种情况非常罕见。