2013-06-04 44 views
2

我正在使用D3爲數組中的每個對象繪製一個矩形,矩形的高度取決於對象的「大小」屬性。這些矩形堆疊在一起。我現在通過總結每個隨後被繪製的矩形的'大小'來設置y的位置 - 但這看起來是錯誤的 - 我想知道是否有更好的方法來做到這一點,例如訪問先前的'y'屬性項目(以及如何?)或另一種方式......D3:如何訪問前一個項目的屬性

Stacked Rectangles

這是我的代碼的本質是什麼樣子。有一個鏈接到下面的小提琴。

var cumY = 0; 
    var blocks1 = sampleSVG.selectAll("rect") 
    .data(fpp) 
    .enter() 
    .append("rect") 
    .sort(SortBySize) 
    .style("stroke", "gray") 
    .style("opacity", blockOpacity) 
    .style("fill", function (d) {return d.Colour}) 
    .attr("width", 80) 
    .attr("height", function (d) {return d.Size}) 
    .attr("x", 5) 
    .attr("y", function (d, i) { 
    var thisY = cumY; 
    cumY += d.Size; 
    // perhaps I could just return something like d.Size + previousItem.GetAttribute("y") ??? 
    return thisY; 
    }); 

http://jsfiddle.net/ninjaPixel/bvER3/

回答

2

這是棘手呢!你是對的,記錄累積高度「似乎錯了」 - 它現在可以工作,但它不是很習慣d3,一旦你開始嘗試做更復雜的事情會變得非常混亂。

我會嘗試使用內置在其中創建解決這個問題stack-layout D3的。如果您遇到困難,您可能需要從this example開始工作併發布更新的小提琴。祝你好運!

相關問題