D3.js 为什么我的d3选择索引不起作用
下面是标签绘图函数的代码片段D3.js 为什么我的d3选择索引不起作用,d3.js,indexing,selection,D3.js,Indexing,Selection,下面是标签绘图函数的代码片段 var legend = d3.select("." + to_chart) .append("g") .selectAll("g") .data(data) .enter().append("rect") .attr("width", 20) .attr("height", 20) .attr("x", 20) .
var legend = d3.select("." + to_chart)
.append("g")
.selectAll("g")
.data(data)
.enter().append("rect")
.attr("width", 20)
.attr("height", 20)
.attr("x", 20)
.attr("y", 20)
.attr("transform", function(d, i){return "translate(0," + i * 30 + ")";})
.attr("style", "stroke: #000; stroke-width: 1px")
.attr("fill", function(d, i) { return color(i); });
var legend = d3.select("." + to_chart)
.append("g")
.attr("class", "t")
.selectAll(".t")
.data(data)
.enter().append("text")
.attr("x", function(data, i){return i;})
.attr("y", 20)
.text(function(i){if (i = 0){
return "eff";
} else if (i = 1) {
return "non-eff";
}
;});
为什么.attr(“x”,函数(data,i){return i;})正在工作,但是
.文本部分不是吗?它总是得到“1”值。好的,我举了一个例子……除了我提到的
函数(d,I){…}
的问题之外,您的比较运算符是错误的……您想使用===
或=
而不是=
。这就是交易:
var data = ["mary","goes"]
var legend = d3.select("body").append("svg").append("g")
.attr("class", "t")
.selectAll(".t")
.data(data)
.enter()
.append("text")
.attr("x", function(d, i){return i * 30;})
.attr("y", 20)
.text(function(d,i){
if (i === 0){
return "eff";
} else if (i === 1) {
return "non-eff";
}
;});
这导致:
eff non eff您需要将值和索引参数传递给函数:
函数(d,i)…
。第一个参数是值,第二个是索引…如果只传递一个参数,不管您调用它d还是i,该值都是返回的值。好的,我很早就传递了它,但在函数中i始终等于1,但我期望0和1。当然,匹配迭代时它会返回0和1。很奇怪,下面的两个字符串不起作用。如果要在.text()调用中使用索引,则调用必须是text(函数(d,i){…})
,其中d是值,i是索引。现在它是text(函数(i){…}
,所以我表示值。如果我只返回值,它会工作。但是我想返回文本取决于索引,我必须指定。现在它是。text(函数(d,i){if…;});谢谢:)这是一个很好的纪律…我应该把它作为一个尽可能完整的例子来展示任何惊喜。我是从试图回答这个问题的人的角度讲的。这是没有必要的。一旦我能够把主要部分作为一个完整的例子,我就能清楚地看到问题。谢谢