所以目前我正在尝试创建一个包含数千个节点和图中大约 30k 个链接的力导向图。正如您可能猜到的,模拟速度非常非常慢。我想做的是预先计算节点的所有位置并仅渲染静态(但交互式)图表。有没有办法使用 d3.js 计算力定向图而不渲染它(使其更快),然后只根据预先计算的值渲染静态图?我的代码目前基于 Mike Bostock 的example. http://bl.ocks.org/4062045
d3 用于力定向图形布局的方法是标准的排斥力和吸引力模型,您可以在维基百科上找到伪代码(http://en.wikipedia.org/wiki/Force-based_algorithms_%28graph_drawing%29#Pseudocode)或者查看 d3 源代码本身(https://github.com/mbostock/d3/blob/master/src/layout/force.js)。
该算法每个刻度(或时间片)的复杂度为 O(n^2),大约需要 n 个刻度才能达到平衡,因此整个布局过程为 O(n^3) (http://www.ecs.umass .edu/ece/labs/vlsicad/ece665/presentations/Force-Directed-Adel.ppt)。对于数千个节点来说这是不切实际的。
要尝试回答您的具体问题,只需在 SVG 容器元素上使用 CSS、display: none 即可。一旦初始模拟“最终”完成,您就可以获取 SVG 元素的 HTML 源代码,并将其用作静态但交互式表示的基础。 (一旦你有了所有元素的 html,你只需在它们上添加鼠标悬停事件即可让它们显示其详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)