2017-06-23 57 views
3

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()看起来好多了。我怎样才能解决这个问题?

UPDATE:

我想我需要删除从图表旧尺寸和/或群体,但我怎么能这样做呢?

+0

做'''chart.select(“dim”)。remove();'''做什么更好? –

+0

@ISOmetric我在图表的第二个配置之前添加了这个,并且有相同的问题 –

+0

那里有什么其他的东西吗?我们能否在配置之间看到你所做的一切? –

回答

1

这只是一个猜测,因为你没有提供代码。

正如我上面评论,我认为这是一个错误,在您使用的分组酒吧的实施。

但实际上,我认为这是dc.js核心中的一个错误:它没有期望在没有渲染的情况下更改堆栈的数量。我找到了一个对bug here的引用。 (这里原是一个很大的事情,只是工作的渲染,没有重绘,我们正在慢慢修补的。)

试试这个,当你更换堆栈:

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

其中nstacks是多少新图表中的堆栈。它将删除任何多余的堆栈,并且现有的应该仍然可以过渡。

+0

谢谢,现在我在添加新配置之前使用'chart.selectAll(“g.stack”)。remove()'。 –

+0

当然,这会迫使dc.js再次渲染这些条形图,所以在任何现有条形图上都会失去转换。如果您要更换所有数据,则转换可能无意义。 – Gordon