此问题是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.close
,d.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
有没有人知道如何遍历上面的示例,为每行数据绘制路径?
答案 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。