我使用这个来自InfoVis工具包的RGraph示例来绘制节点。这是我的节点在JSON中的样子:
{"id":"parentId","name":"parent","adjacencies":[{"nodeTo":"missingChildId","nodeFrom":"parentId"}]}
问题是missingChildId
引用了一个不存在的节点。目前InfoVis从parent
节点到一个标记为"missingChildId"的节点绘制一条边。
我不希望这条边被绘制。
类似地,函数node.eachAdjacency
给出了图中不存在的节点。是否有某种过滤器将这些缺失的节点分类出来?
谢谢。
您的json数据似乎有几个问题。
1:如果你在json数据中指定"nodeFrom"one_answers"nodeTo"在邻接关系中,那么infovis将创建这些邻接关系。在理想的情况下,你不应该有这样的邻接在你的json数据。
2:此外,邻接关系中的nodeTo和nodeFrom指向您想要引用的节点的id,并且id应该是唯一的。从你的数据看来,"missingchilddid"one_answers"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);