您想要做的基础是堆积条形图:http ://bl.ocks.org/mbostock/3886208
但是,您需要考虑一些事项。y 轴和 x 轴必须成比例,因此您必须仔细考虑:
- 图的大小
- 数据点的数量
- 每个数据点可以具有的最大值
并为每个刻度选择一个高度、宽度和“值” - 每个正方形。
我在这里做了一个演示小提琴:http: //jsfiddle.net/sa5RK/
它假设了一些事情(为简单起见!):
- 每个刻度是一个值
设置盒子的高度和宽度
var boxheight = 6;
高度/宽度可以根据框的大小和数据值动态变化
var margin = {top: 20, right: 20, bottom: 80, left: 40},
width = boxheight * data.length;
var max = d3.max(data, function(d){return d.a + d.b + d.c});
var height = max * boxheight;
我希望这足以让你开始!
另一个对您有帮助的关键是学习如何将每个数据连接选择设置为一个变量,然后在其中选择将允许您访问外部绑定数据。例如。下面,每个数据组(原始数组中的值)-> 具有类型(a、b 或 c)-> 具有矩形
var groups = svg.selectAll(".group")
.data(data)
.enter().append("g")
.attr("transform", function(d,i){return "translate(" + x(i) + ", 0)"})
.attr("class", "group")
var types = groups.selectAll(".type")
.data(function(d){return d.offsets})
.enter().append("g")
.attr("transform", function(d){ return translate(0,y(d.y1))})
.attr("class", "type")
.attr("fill", function(d){return color(d.type)})
types.selectAll("rect")
.data(function(d){return d3.range(0,d.value)})
.enter().append("rect")
.attr("height", boxheight-0.5)
.attr("width", boxheight-0.5)
.attr("y", function(d){ return boxheight * d })