棧佈局很簡單,就像棧的形式同樣,將數據疊加起來顯示。javascript
<script type="text/javascript"> var w = 500; var h = 300; //Original data //數據的格式必須整理成這樣 var dataset = [ [ { x: 0, y: 5 }, { x: 1, y: 4 }, { x: 2, y: 2 }, { x: 3, y: 7 }, { x: 4, y: 23 } ], [ { x: 0, y: 10 }, { x: 1, y: 12 }, { x: 2, y: 19 }, { x: 3, y: 23 }, { x: 4, y: 17 } ], [ { x: 0, y: 22 }, { x: 1, y: 28 }, { x: 2, y: 32 }, { x: 3, y: 35 }, { x: 4, y: 43 } ] ]; //定義一個棧佈局 var stack=d3.layout.stack(); stack(dataset); var xScale=d3.scale.ordinal() .domain(d3.range(dataset[0].length)) .rangeRoundBands([0,w],0.05) var yScale=d3.scale.linear() .domain([0,d3.max(dataset,function(d){ return d3.max(d,function(d){ return d.y0+d.y; }) })]) .range([0,h]); var colors=d3.scale.category10(); var svg=d3.select("body") .append("svg") .attr("width",w) .attr("height",h) var groups=svg.selectAll("g") .data(dataset) .enter() .append("g") .style("fill",function(d,i){ return colors(i); }) var rects=groups.selectAll("rect") .data(function(d){ return d; }) .enter() .append("rect") .attr("x",function(d,i){ return xScale(i); }) .attr("y",function(d){ return yScale(d.y0); }) .attr("height",function(d,i){ return yScale(d.y); }) .attr("width",xScale.rangeBand()) </script>
每一個rect的座標爲(x,y0),高度爲y 從圖片中咱們能夠看到d的數據組成。java