我有一个网络图io::Write
现在我有一些连接节点,你可以看到大多数节点只有一个连接节点,它们的度数是1.现在我想删除这些节点以清除混乱。自从过去2天以来无法找到。 visjs文档中没有这样的辅助函数。非常感谢帮助。
答案 0 :(得分:2)
我相信第一个答案-by macramole-(更新前)建议的算法实际上会隐藏未连接的节点(0度),而不是1度的节点。 我可能只是迭代网络中的所有边缘,同时保持每个节点的“度”计数器,这是您正在访问的边缘中的端点(您可以通过抓取edge.from和edge.to值来获取这些节点,如如上所示)。每当节点在此搜索中通过边缘“命中”时,您将增加节点的度数计数器。 最终,您将获得网络中每个节点的度数值,此时您可以决定隐藏哪些节点。 现在更新此答案以包含我建议的代码(注意:节点和边是可见的DataSet实例):
示例代码:
var nodeToDegrees = {}; // keeps a map of node ids to degrees
var nodeFrom, nodeTo;
for (edge in edges) {
nodeFrom = edge.from;
nodeTo = edge.to;
nodeToDegrees[nodeFrom] = nodeToDegrees[nodeFrom] ? nodeToDegrees[nodeFrom] + 1 : 0;
nodeToDegrees[nodeTo] = nodeToDegrees[nodeTo] ? nodeToDegrees[nodeTo] + 1 : 0;
}
for (node in nodes) {
if (nodeToDegrees[node.id] = 1) nodes.update([{node.id, hidden: true}]);
}
答案 1 :(得分:0)
这可能有效:
var DEGREES_HIDDEN = 1;
for ( var node of nodes ) {
node.cantLinks = 0;
for ( var link of links ) {
if ( link.from == node.id || link.to == node.id ) {
node.cantLinks++;
}
}
}
for ( var node of nodes ) {
if ( node.cantLinks <= DEGREES_HIDDEN ) {
node.hidden = true;
}
}
节点和链接是数组而不是vis.DataSet,我在完成后创建了后者。
看起来并不是很好,但它确实完成了工作。希望你觉得它很有用。