自动放置流程图形状的算法

时间:2012-08-28 03:49:22

标签: javascript algorithm canvas graph d3.js

我的团队需要使用HTML5 Canvas或D3库(或其他更合适的建议,欢迎建议)在JavaScript中构建流程图生成器。该流程图将从JSON文档中定义的有向图生成。我的问题如下:我们可以使用哪种标准算法来促进流程图中形状的自动放置(图中的节点),以便最大限度地减少重叠连接的数量及其长度?

4 个答案:

答案 0 :(得分:5)

您正在寻找的标准算法是力导向图:http://en.wikipedia.org/wiki/Force-based_algorithms_(graph_drawing) 如果你想要一个轻量级,浏览器不可知和高效的FD js库,请看一下arbor.js:https://github.com/samizdatco/arbor

恕我直言D3是你会发现的最强大的库(它嵌入基于力的算法),但它与IE不兼容< 9比文档更低(文档导向)(更少学习,更多思考)。

JIT也是一个很好的库(它也嵌入了基于力的算法),与IE不兼容< 9.它更像是infovis的Highcharts。更多要学习(助手,选项,参数),少考虑。

WireIt(YUI3)和JSplump(jQuery)是很好的管道库,但不包括FD算法。

答案 1 :(得分:5)

力导向算法并不是这种问题的最佳选择。我宁愿建议使用分层图形绘制(http://en.wikipedia.org/wiki/Layered_graph_drawing)算法。这种算法的一个很好的JS实现是Dagre(https://github.com/cpettitt/dagre)。您还可以查看我关于自定义图表的自动布局和渲染的博文:http://www.daviddurman.com/automatic-graph-layout-with-jointjs-and-dagre.html

答案 2 :(得分:0)

JavaScript InfoVis Toolkit(JIT)可能有一些适合您目的的工具:

http://thejit.org/

答案 3 :(得分:0)

This是我觉得有用的库。它叫做GoJS。希望这会有所帮助。