强制有向图过滤器节点和链接

时间:2020-05-15 16:20:15

标签: javascript d3.js force-layout d3-force-directed

我目前正在使用D3.js中的力导向图进行数据可视化。我有一个用例,其中我必须根据分数的阈值来过滤节点和链接(通过过滤,我不应该在数据可视化中显示。)

以下是一段数据json

"links": [
{
"source": 17,
"target": 9,
"score": 0.428
},
{
"source": 3,
"target": 9,
"score": 0.198
},
{
"source": 17,
"target": 13,
"score": 0.336
},
{
"source": 11,
"target": 13,
"score": 0.178
},
{
"source": 17,
"target": 13,
"score": 0.336
}]

"nodes": [
{
"size": 8,
"score": 0.5,
"id": "Node1",
"name": "Node1",
"type": "triangle-up"
},
{
"size": 10,
"score": 0.1,
"id": "Node2",
"name": "Node2",
"type": "circle"
},
{
"size": 10,
"score": 0.1,
"id": "Node3",
"name": "Node3",
"type": "circle"
},
{
"size": 10,
"score": 0.1,
"id": "Node4",
"name": "Node4",
"type": "circle"
},
{
"size": 10,
"score": 0.1,
"id": "Node5",
"name": "Node5",
"type": "circle"
}]

所以我所做的是基于链接中的score参数的,我已经从links数组中删除了一项。当我尝试从节点数组中删除该节点时,我的图形给出了多个错误。因此,我想知道有什么方法可以找到未与任何其他节点链接的节点,以便可以在数据可视化中删除或不显示它们。

1 个答案:

答案 0 :(得分:1)

我以这种方式执行:

var links=data.links.filter(function(d) {
    return d.score > 0.5;
});

var nodes=data.nodes.filter(function(d) {
    if (d3.set(links.map(function(v) { return v.source_id })).values().includes(d.id) | d3.set(links.map(function(m){ return m.target_id })).values().includes(d.id)) {
        return d.id
    };
});

然后我有一个类似drawNetwork(links,nodes){...}

的函数

希望这会有所帮助!