d3JS:迭代未知点数的路径

时间:2014-01-15 18:56:00

标签: javascript d3.js tsv

此问题是original question regarding line segments的扩展名。

关于原始问题,使用this script解决了从tsv中绘制线段的问题(感谢@VividD)。以下是从tsv中绘制两个线段的数据:

x0      y0      x1      y1      weight
0.5     0.5     0.2     0.2     2
0.25    0.35    0.7     0.8     1

现在,我正在尝试使用未知数量的顶点绘制路径(或折线)。这将要求脚本遍历每一行,查找要添加到每个路径的数据的列数。我不知道如何做到这一点,因为我一直在使用的脚本假设程序员知道列名(d.closed.date等)。

x0      y0      x1      y1      x2      y2           weight
0.5     0.5     0.2     0.2                          2
0.25    0.35    0.7     0.8     0.5     0.6          1

有没有人知道如何遍历上面的示例,为每行数据绘制路径?

1 个答案:

答案 0 :(得分:2)

假设数据在数组data中,这将为每个元组创建一个可变长度的数组points

data.forEach(function(d) {
    d.points = [];
    for (var i = 0; d["x"+i] !== "" && (typeof d["x"+i] !== 'undefined'); i++) {
        d.points.push([d["x"+i], d["y"+i]]);
    }
});

E.g。对于示例中的第一行

d.points = [[0.5, 0.5], [0.2, 0.2]]

然后可以使用它绘制线条:

var line = d3.svg.line();

svg.selectAll("path")
    .data(data)
    .enter()
    .append("path");

svg.selectAll("path")
    .attr("d", function(d) { return line(d.points); })
    .attr("stroke-width", function(d) { return (d.weight); })
    .attr("stroke", "black")
    .attr("fill", "none");

完整示例here