我的Javascript技能相当基本,但足够先进,让我能够使用d3库设计一些相对复杂的图表。我现在已经到了可以重复使用我的代码的地步,这就是我遇到优秀API文档无法让我过去的第一道障碍。< / p>
例如,在我的大多数图表中,我想添加一个图例。我有一些基本代码,为传奇添加一个svg组,看起来像这样
var legend = chartContainer.selectAll(".legend")
.data(d3.map(data, function(d){return d.FIELDNAME;}).keys())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + (((height/3)) + (i*20)) + ")"; });
我希望能够做的是向函数添加一个参数,该函数允许我设置图例中数据集中的哪个字段。像下面的东西......但实际上有效:)
function addLegend(legendKey) {
var legend = chartContainer.selectAll(".legend")
.data(d3.map(data, function(d){return d.legendKey;}).keys())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + (((height/3)) + (i*20)) + ")"; });
// rest of the legend code
}
通过
调用addLegend("FIELDNAME");
最后,可以理解(也许)这个也没有用
function helper(legendKey){
return legendKey;
}
function addLegend(helper) {
var legend = chartContainer.selectAll(".legend")
.data(d3.map(data, function test (d, addLegend){return d.addLegend;}).keys())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + (((height/3)) + (i*20)) + ")"; });
// rest of the legend code
}
addLegend(helper("agent"))
非常感谢任何帮助。