我正在学习 D3.js 并试图了解与流图一起使用的数据键。我想改编官方流图示例:
...这样每个路径都有一个明确的数据键,并且鼠标悬停记录数据键。
官方示例添加路径如下:
var area = d3.svg.area()
.x(function(d) { console.log('x', d.data); return d.x * w / mx; })
.y0(function(d) { return h - d.y0 * h / my; })
.y1(function(d) { return h - (d.y + d.y0) * h / my; });
vis.selectAll("path")
.data(data0)
.enter().append("path")
.style("fill", function() { return color(Math.random()); })
.attr("d", area);
我尝试按如下方式调整代码,但我不确定如何更改data0
(当前为数组数组)的结构以实现我想要的:
vis.selectAll("path")
.data(data0, function(d) { return d.name }) // Add key function
.enter().append("path")
.style("fill", function() { return color(Math.random()); })
.attr("d", area)
.on("mouseover", function (d,i) {
console.log("mouseover", d.name); // Log name property on mouseover
});
就目前而言,如果我没有对 的结构进行任何更改data0
,毫无疑问它是行不通的。如何在不弄乱and函数的情况下添加name
属性?data0
area
.data()
更新:更清楚一点:D3 文档说area 函数需要一个二维数组。因此,如果我data0
从一个二维数组更改为一个对象数组,每个对象都有一个name
键和一个data
键,我怎样才能更改我传递给的内容area
?