我试图用D3 v4:
在堆积条形图中可视化这些数据var data = [
{'id': '10', 'status': 'on', 'variant': 'A', 'value': '200'},
{'id': '10', 'status': 'on', 'variant': 'B', 'value': '500'},
{'id': '11', 'status': 'off', 'variant': 'A', 'value': '100'},
{'id': '12', 'status': 'on', 'variant': 'A', 'value': '600'},
...
]
具有相同键id
的所有元素应堆叠在x轴上,其中value
定义高度,status
定义颜色。
数据集可能包含多个具有相同id
但不同status
或variant
的元素,例如示例中的id = 10。
哪种格式适合堆叠这些数据?我的方法是嵌套它:
var nested = d3.nest()
.key(function(d) { return d.id; })
.entries(data);
从这里我不知道如何生成y0和y1值。 我可以使用d3.stack吗?
答案 0 :(得分:1)
您可以遍历每个顶级对象中的values
数组,并保持总计value
,每个y0
变为<rect>
。 y1
然后是y0 + value
。
然后将每个顶级对象绑定到表示整个堆栈的<g>
标记,将其转换为适当的x
位置(假设条形图是垂直的),并将<rect>
附加到每个<g>
都有values
道具作为数据。根据矩阵所在的位置设置矩形的height
和y
位置。这可能看起来像:
var groups = d3.selectAll("g")
.data(nested)
.enter().append("g");
groups.attr("transform","translate...");
var rects = groups.selectAll("rect")
.data(function(d) { return d.values })
.enter().append("rect");
rects
.attr("width",...)
.attr("height",...)
.attr("y",...)