Javascript d3.js力定向图:如何使节点大小取决于链接的值?

Javascript d3.js力定向图:如何使节点大小取决于链接的值?,javascript,d3.js,d3-force-directed,Javascript,D3.js,D3 Force Directed,我有这样的数据: var节点=[ { “id”:“A”, “标签”:“数据A”, “组”:“0”, 级别:“0” }, { “id”:“B”, “标签”:“数据B”, “组”:“1”, “级别”:“1” }, //等// ] 变量链接=[ { “来源”:“A”, “目标”:“B”, “强度”:“0.5”, “值”:“276” }, { “来源”:“A”, “目标”:“C”, “强度”:“0.5”, “值”:“866” }, //等// ] 我一直在尝试根据链接中的值设置节点半径大小,该链接将节

我有这样的数据:

var节点=[
{
“id”:“A”,
“标签”:“数据A”,
“组”:“0”,
级别:“0”
}, {
“id”:“B”,
“标签”:“数据B”,
“组”:“1”,
“级别”:“1”
},
//等//
]
变量链接=[
{
“来源”:“A”,
“目标”:“B”,
“强度”:“0.5”,
“值”:“276”
}, {
“来源”:“A”,
“目标”:“C”,
“强度”:“0.5”,
“值”:“866”
},
//等//
]
我一直在尝试根据链接中的
值设置节点半径大小,该链接将节点称为其
目标

因此,例如,节点B的大小应该根据276的值(以节点B为目标的链路)确定

这就是我所使用的:

var nodeElements=g.append(“g”)
.attr(“类”、“节点”)
.selectAll(“圆圈”)
.数据(节点)
.enter().append(“圆”)
.attr(“r”,函数(节点,链接){
var半径=12;
如果(node.level==0)radius=radius*2;//将主节点设置为比其他节点大
node.weight=link.filter(函数(链接){
if(link.target.index==node.index){
var linkValue=link.value;
如果(链接值>500)?(半径=12):(半径=6);
}
});
返回半径;
})
.attr(“填充”,getNodeColor)
.attr(“笔划”、“fff”)
.attr('stroke-width',2)
.on('mouseover',selectNode)
但这似乎不起作用。表示它无法识别
链接。筛选器
之类的内容。我使用的是d3.jsv4


试图寻找线索,但仍然没有得到任何线索。有什么想法吗?

有几件事需要更改,但首先您应该了解,您并不是自动将链接添加到节点的数据中

因此,filter语句的目的似乎是基于索引查找该数组中的对应链接。 没有
link
变量传递到外部函数中,但是您应该在上面定义的
links
数组中搜索具有节点id的目标的链接

如果您只需要一个链接,而不是所有链接,请使用。但是
filter
find
的工作方式相同-对数组中的每个项调用定义的匿名函数
find
在第一个找到的对象处停止,而
filter
返回所有匹配项

.attr("r", function(dat, index, n) {
    var linkItem = links.find(function(link) {
        return link.target == dat.id;
    });
    var radius = 12;
    // linkItem would be undefined if the item was not found in the links
    if (linkItem && linkItem.value > 500) {
        radius = 12;
    } else {
        radius = 6;
    }

    // you should double the radius towards the end,
    // so that radius doesn't get overwritten
    if (dat.level === 0) {
        radius = 2 * radius;
    }

    return radius;
})

有几件事需要更改,但首先您应该了解,您不会自动向节点的数据添加
链接

因此,filter语句的目的似乎是基于索引查找该数组中的对应链接。 没有
link
变量传递到外部函数中,但是您应该在上面定义的
links
数组中搜索具有节点id的目标的链接

如果您只需要一个链接,而不是所有链接,请使用。但是
filter
find
的工作方式相同-对数组中的每个项调用定义的匿名函数
find
在第一个找到的对象处停止,而
filter
返回所有匹配项

.attr("r", function(dat, index, n) {
    var linkItem = links.find(function(link) {
        return link.target == dat.id;
    });
    var radius = 12;
    // linkItem would be undefined if the item was not found in the links
    if (linkItem && linkItem.value > 500) {
        radius = 12;
    } else {
        radius = 6;
    }

    // you should double the radius towards the end,
    // so that radius doesn't get overwritten
    if (dat.level === 0) {
        radius = 2 * radius;
    }

    return radius;
})
设置“r”属性的函数不正确。匿名函数的参数是“当前数据(d)、当前索引(i)和当前组(节点)”。请参阅设置“r”属性的函数不正确。匿名函数的参数是“当前数据(d)、当前索引(i)和当前组(节点)”。看见