2012-07-31 41 views
0

我創建了此jsbin http://jsbin.com/ibewux/3/edit以顯示轉換時的奇怪行爲。D3 - 初始化後第一次轉換時的問題

圖表初始化時,它正確顯示數據(請參見下面的表格)。

如果我嘗試通過下拉菜單更改圖表類型,則會交換一些系列;發生這種情況後,系列不再交換。

如果點擊updateChartData按鈕,會發生同樣的事情;第一次將它與該表中顯示的數據進行交換。

因此,似乎只有在初始化後的第一次轉換受到這種不需要的交換。

這是一小段代碼,不知道你是否可以發現這種情況發生的原因。

感謝

回答

2

isVerticalChart是真的,你使用的是帶有域svg.pointsNames(這似乎是形式"Col " + i的字符串數組)的順序量表:

x = d3.scale.ordinal().domain(svg.pointsNames); 

但是,你則去在這個尺度上使用基準索引,而不是這些字符串:

.attr("x", function(d, i) { return isVerticalChart ? x(i) : x(d.y0 - d.size); }) 

我想你應該通過一個str從域到這裏的規模,以避免你看到的奇怪行爲。

它只有工程此刻,因爲如果您將密鑰傳遞給之前沒有見過的序號級別,它會將其添加到域中。

可能還有其他問題,但希望能讓你更接近。

+0

謝謝傑森,這似乎解決了這個問題。我怎樣才能用文本值(即列1,列2等)替換數字x標記(即0,1,2,3等)?謝謝 – Gian 2012-07-31 19:30:49

+0

對於軸?這應該在您設置axis.scale(x)時自動發生(它將使用序數比例的比例域)。您還可以使用axis.tickFormat設置自定義的tickFormat。如果您遇到特定問題,您應該打開一個新問題。理想情況下使用較短的示例代碼。 :) – 2012-08-01 12:53:10

+0

謝謝。我故意留下所有的代碼,希望它能對其他人有用。學習到教訓了。 :-) – Gian 2012-08-01 14:49:48