【问题标题】:d3JS: iterate through paths of unknown point countd3JS:遍历未知点数的路径
【发布时间】:2014-02-04 10:09:39
【问题描述】:

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

关于原始问题,从 tsv 绘制线段的问题已通过 this script 解决(感谢 @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

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

【问题讨论】:

    标签: javascript d3.js tsv


    【解决方案1】:

    假设数据在数组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]]);
        }
    });
    

    例如对于您示例中的第一行

    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

    【讨论】:

    • 这非常优雅。感谢您的发帖,这不仅教会了我这个问题(我对 javascript 还有些陌生)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多