【问题标题】:force directed graph filter nodes and links强制有向图过滤器节点和链接
【发布时间】:2020-09-01 13:19:04
【问题描述】:

我目前正在使用 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"
}]

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

【问题讨论】:

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


    【解决方案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){...}的函数

    希望这会有所帮助!

    【讨论】:

    • 如何检查没有链接的节点?
    • 但只有带有链接的节点才有您将过滤的分数。正确的?或者你问的是不同的问题?
    • 并不是只有有链接的节点才有分数。每个链接都有一个分数,我想根据链接的分数过滤完整的图表。现在,当我检查阈值(0.5)时,我删除了链接。由于我的图表中留下了一些没有链接的节点。所以我想删除那些在图中没有链接的节点。所以我的问题是如何检查没有链接的节点,一旦我得到它们,我可以删除它们或不显示
    • 我明白了,但是我通过检查节点 ID 是否在链接 source_ids 和 target_ids 中来更新节点。仔细检查 if 语句。
    • 我也在做同样的事情,但是有一个节点被删除了,当我启动它时图表给出错误(force.start())
    猜你喜欢
    • 2013-01-14
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 2017-10-21
    • 2013-10-07
    • 2015-12-04
    相关资源
    最近更新 更多