我正在尝试在 D3 中制作具有多条线路径的时间序列折线图。我想将文本标签应用于这些路径。
我目前正在做的是使用实用程序函数d3.svg.line
根据数据的属性(的值plotProps
,它们是我的 json 数据中的键)制作几个元素。
function makeLine(prop){
return d3.svg.line()
.x(function(d){ return x(d.date); })
.y(function(d){ return y(d[prop]); });
}
var plotProps = ['registered','subscribers','total','anonymous'];
plotProps.forEach(function(prop){
line = makeLine(prop);
svg.append("path")
.datum(graph_data)
.attr("class", "line datapath")
.attr("d", line)
.attr('prop',prop)
.style('text-anchor','middle');
svg.append('svg:text')
.attr('class','label')
.attr("y", "")
.attr("x", "")
.attr("dy", ".71em")
.style("text-anchor", "end")
.text('foobar');
});
我在这里的方法感觉与 d3 的数据连接方法非常违反直觉,因为如果数据源是动态的,我的行生成不兼容。我似乎也无法让标签正确显示。大多数示例使用添加到 g 元素的标签 - 我应该将它们添加到我的案例的路径中(只是每行上方的文本)?将函数传递给我附加的文本元素的 x,y 属性在记录 args 时不会在控制台中输出任何内容。
有没有办法生成多行来允许我链接这些标签调用?我希望我已经足够清楚了。