JavaScript InfoVis:隐藏缺少节点的边

时间:2013-04-28 20:39:42

标签: javascript graph infovis

我正在使用this RGraph example中的InfoVis toolkit来绘制我的节点。这就是我的节点在JSON中的外观:

{"id":"parentId","name":"parent","adjacencies":[{"nodeTo":"missingChildId","nodeFrom":"parentId"}]}

问题是missingChildId指的是不存在的节点。目前,InfoVis将parent节点的边缘绘制到标记为“missingChildId”的节点。

我不希望绘制这条边。

类似地,函数node.eachAdjacency给出了图中不存在的节点。是否有某种过滤器来排除那些丢失的节点?

谢谢。

1 个答案:

答案 0 :(得分:0)

您的json数据似乎存在一些问题。

1:如果在json数据中的邻接中指定“nodeFrom”和“nodeTo”,那么infovis将创建这些邻接。在理想情况下,您的json数据中不应该有这种邻接关系。

2:此外,邻接中的nodeTo和nodeFrom指向要引用的节点的ID,而id应该是唯一的。从您的数据看起来像“missingChildId”和“parentId”并不是唯一的。你确定那些是独特的ID吗?

我认为你必须确保每个节点都有一个唯一的id并在邻接中使用它们。

如果你无法修复你的第一个问题的json,那么一个解决方法就是隐藏id为“missingChildId”的那些节点。

因此,在渲染图形之后,您可以使用以下代码隐藏ID为“missingChildId”的节点。

rg.graph.eachNode( function(node){
    if( node.id == "missingChildId" )
        node.setData("alpha",0,"end");
});
rg.graph.animate({
   modes: ['node-property:alpha'],
   duration: 500
});

同样,每次迭代图形的节点/邻接时,您都必须使用它们的id过滤掉所有这些不需要的节点。 您还可以在不需要的节点上设置自定义属性。

node.setData("ignore",true); 

然后使用此属性过滤它们。