【发布时间】:2013-02-28 10:24:12
【问题描述】:
我有一个可能包含大量节点的强制布局,对于图形来说太大而无法响应地呈现。我在想提高系统性能的一种方法是在节点数量太大时通过消除基于入度和出度的节点来修剪图形。
重新计算节点和链接列表有点麻烦,因为链接与节点数组中的索引相关,因此所有链接都需要重新构建。
能够标记单个节点以进行排除似乎更优雅(类似于某些节点fixed 的方式)并让布局算法跳过这些节点。这将允许我动态选择要显示的图形子集,同时为每个节点保留尽可能多的状态(例如位置)。
有没有人实现过类似的东西?
更新:
我尝试实施过滤器建议,但遇到了一个有趣的错误。看来filter方法返回的对象没有实现enter:
qChart apply limit:2
NODES BEF: [Array[218], enter: function, exit: function, select: function, selectAll: function, attr: function…]
NODES AFT: [Array[210], select: function, selectAll: function, attr: function, classed: function, style: function…]
Uncaught TypeError: Object [object Array] has no method 'enter'
下面的代码运行得到从BEF到AFT:
nodeSubset = nodeSubset.filter(function(n) { return (n.sentCount() <= limit); });
更新 2:
我创建了一个jsfiddle 来隔离问题。这个例子实现了我对 ChrisJamesC 答案的解释。当我尝试直接执行他的建议时(将filter 放在data 之后),随后对enter 的调用失败,因为filter 返回的对象没有定义enter。
目标是使布局仅选择具有active == true 的那些节点,因此在此示例中,这意味着应排除节点b。
【问题讨论】:
标签: d3.js force-layout