也許這是一個愚蠢的問題,但我是一個D3新手。我正在嘗試根據源鏈接權重更改強制佈局中的圓圈半徑。爲什麼在tick函數中可以訪問d.source.weight但不能在其他地方訪問?如何在強制佈局中訪問節點的weight屬性?
E.g.
force.on("tick", function() {
link.attr("x1", function(d) {console.log(d.source.name + " " + d.source.weight; return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
將正確的值返回給控制檯,但爲什麼附加圓圈時不能訪問這些屬性?
node.append("circle")
.attr("class", "node")
.attr("r", function(d) {return d.source.weight * 2;}); // breaks
我覺得這是一個多D3的問題一個基本的JavaScript問題,但我不能找到它太大幫助。任何幫助表示讚賞。
謝謝。我在文檔中看到,權重是節點的屬性,而不是鏈接。在node.append的情況下,我假設「d」是節點,在這種情況下,d.source.weight不起作用。然而,d.weight也不起作用,我不知道爲什麼(返回「未定義」)。 d.source.weight我猜想在link.attr內工作,因爲「d」是一個鏈接;所以我想它會將d.source解釋爲一個節點,允許您訪問d.source.weight?也許這些都是根本性的問題,但文件不清楚(從我能看到的)。 – justinm1
另外,我不知道這個例子,但它與我想要做的相似。在那裏,他正在通過node.transition()方法設置radius屬性,這對我來說有點令人困惑(但我沒有對該功能做過多的工作)。 – justinm1
.transition()只是添加動畫。如果你檢查'link'和'node',你會看到它們是一個對象數組。如果打開數組並查看其中的任何對象,則它們都具有__data__屬性,當您使用.attr(「r」,函數(d){...})時,d將相等。 –