我想从这样的嵌套对象结构中绘制多条 svg 线(使用 D3.js):
data = [
{ Name: "jim", color: "blue", Points: [{x:0, y:5 }, {x:25, y:7 }, {x:50, y:13}] },
{ Name: "bob", color: "green", Points: [{x:0, y:10}, {x:25, y:30}, {x:50, y:60}] }
];
var line_gen = d3.svg.line().interpolate("linear")
.x(function(d){return d.x;})
.y(function(d){return d.y;});
基于这个问题,我的第一次尝试是使用 svg:g 表示第一个嵌套级别,然后访问组内的第二个嵌套级别以呈现线条:
var g = svg.selectAll(".linegroup")
.data(data).enter()
.append("g")
.attr("class", "linegroup")
.style("stroke", function(d) { return d.color; })
.style("fill", "none");
g.selectAll(".line")
.data(function(d) { return d.Points;})
.enter().append("svg:path")
.attr("d", line_gen);
但这并没有渲染任何线条。相反,在每个组中,我为三个数据点中的每一个都获得了一个空路径标签。显然,数据的形状正在引起问题。
<g class="linegroup" style="stroke: #0000ff; fill: none;">
<path></path>
<path></path>
<path></path>
</g>
我确实找到了一个不使用组的解决方案(将作为答案发布),但我仍然想知道为什么组解决方案不起作用。