我正在尝试在多系列折线图上放置符号。在d3.js API 参考中,符号是使用转换函数定位的:
vis.selectAll("path")
.data(data)
.enter().append("path")
.attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; })
.attr("d", d3.svg.symbol());
不幸的是,我似乎无法应用它来构建我自己的 function(d) 回调函数来访问 d.date 和几个 d.temperature 集,如下所示并在此示例中描述:
var cities = color.domain().map(function(name) {
return {
name: name,
values: data.map(function(d) {
return {date: d.date, temperature: +d[name]}; <-- stored in 'd.values'
})
};});
通过反复试验,我能想到的最好的方法如下,我提供的是喜剧救济:
for (i=0; i<cities[0].values.length; i++) // note: for comic relief only
{
vis.selectAll(".class")
.data(cities)
.enter().append("path")
.attr("transform", function(d) { return "translate(" + x(d.values[i].date) + "," + y(d.values[i].temperature) + ")"; })
.attr("d", d3.svg.symbol())
}
它确实有效,我认为这很有趣,但我编写正确嵌套函数的尝试到目前为止都失败了。例如,这给出了 transform="translate(NaN,NaN)"
.attr("transform", function(d) { return "translate(" + x(d.values, function(c) { return c.date}) + "," + y(d.values, function(c) { return c.temperature}) + ")"; })
我不明白什么?任何帮助将不胜感激。