2017-06-23 60 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