var data = [ [{y: 10}, {y: 20}, {y: 30}], // 青 [{y: 15}, {y: 5}, {y: 10}], // 赤 [{y: 25}, {y: 10}, {y: 5}], // 緑 ]; var container = d3.select('#container'); var svg = container.append('svg').attr({width: 120, height: 200}); // グラフを重ねるレイアウトを使う var stack = d3.layout.stack(); stack(data); var group = svg.selectAll('g') .data(data).enter().append('g'); var max = d3.max(data[data.length - 1], function(d) { return d.y + d.y0; }); var chart_width = 20; var colors = ['#89e1f4', '#fab0a3', '#a1db8d']; var y_scale = d3.scale.linear().domain([0, max]).range([0, 200]); // 表示 group.selectAll('rect') .data(function(d) { return d; }) .enter() .append('rect') .attr({ fill: function(d, i, s) { return colors[s]; }, x: function(d, i) { return chart_width * i + 10 * i; }, y: function(d, i, s) { return 200 - y_scale(d.y0 + d.y); }, width: chart_width, height: function(d) { return y_scale(d.y); } });
<div id="container"></div>