如何清除堆叠图表而不渲染

时间:2017-06-23 07:47:15

标签: javascript d3.js dc.js crossfilter

我有barChart堆叠很少:

chart
    .dimension(dim)
    .group(group1, element1)
    .groupBars(true)
    .stack(group2, element2)
    .stack(group3, element3)

stacked bar chart

稍后我将新维度和组添加到当前图表中:

chart
    .dimension(newDim)
    .group(newGroup1, newElement1)
    .groupBars(true)
    .stack(newGroup2, newElement2)

chart.redraw();

得到一些奇怪的东西:

enter image description here

看起来图表中有来自之前堆栈的绿色条。如果我执行chart.render()而不是chart.redraw()一切正常,但redraw()看起来好多了。我该如何解决这个问题?

更新:

我想我需要从图表中删除旧的维度和/或组,但我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

这只是猜测,因为您还没有提供代码。

正如我上面评论的那样,我认为这是你正在使用的分组栏的实现中的一个错误。

但实际上,我认为这是dc.js核心中的一个错误:它不期望在没有渲染的情况下更改堆栈的数量。我找到了对bug here的引用。 (最初有很多东西只适用于渲染,而不是重绘,我们正在慢慢修补它们。)

更换堆栈时尝试此操作:

for(var i = nstacks; i < 20; ++i) 
    chart.selectAll('g.stack._' + i + ' rect').remove()

其中nstacks是新图表中的堆栈数。它将删除任何多余的堆栈,现有的堆栈仍应转换好。