我有一个表示有向图的数据结构,我想在 HTML 页面上动态呈现它。这些图通常只有几个节点,最高端可能有 10 个,所以我的猜测是性能不会有什么大不了的。理想情况下,我希望能够将其与 jQuery 挂钩,以便用户可以通过拖动节点来手动调整布局。
注意:我不是在寻找图表库。
我有一个表示有向图的数据结构,我想在 HTML 页面上动态呈现它。这些图通常只有几个节点,最高端可能有 10 个,所以我的猜测是性能不会有什么大不了的。理想情况下,我希望能够将其与 jQuery 挂钩,以便用户可以通过拖动节点来手动调整布局。
注意:我不是在寻找图表库。
我刚刚整理了您可能正在寻找的内容:http : //www.graphdracula.net
它是带有有向图布局的 JavaScript、SVG,您甚至可以拖动节点。仍然需要一些调整,但完全可用。您可以使用 JavaScript 代码轻松创建节点和边,如下所示:
var g = new Graph();
g.addEdge("strawberry", "cherry");
g.addEdge("cherry", "apple");
g.addEdge("id34", "cherry");
我使用了前面提到的 Raphael JS 库(graffle 示例)以及我在网上找到的基于力的图形布局算法的一些代码(所有开源,MIT 许可证)。如果您有任何意见或需要某个功能,我可以实现它,请问!
您可能也想看看其他项目!以下是两个元比较:
SocialCompare有一个广泛的库列表,“节点/边缘图”行将过滤图形可视化的库。
DataVisualization.ch 评估了许多库,包括节点/图形库。不幸的是,没有直接链接,因此您必须过滤“图形”:
以下是类似项目的列表(这里已经提到了一些):
vis.js支持多种类型的网络/边图,以及时间线和 2D/3D 图表。自动布局、自动集群、弹性物理引擎、移动友好、键盘导航、分层布局、动画等。麻省理工学院由一家专门研究自组织网络的荷兰公司许可和开发。
Cytoscape.js - 遵循 jQuery 约定,具有移动支持的交互式图形分析和可视化。由 NIH 资助,由@maxkfranz(见他的回答)在几所大学和其他组织的帮助下开发。
JavaScript InfoVis Toolkit - Jit,一个交互式、多用途的图形绘制和布局框架。例如,参见双曲树。由 Twitter 数据可视化架构师Nicolas Garcia Belmonte建造,并于 2010 年被 Sencha 收购。
Plotly 的JS 可视化库使用 D3.js 和 JS、Python、R 和 MATLAB 绑定。见IPython的一个nexworkx例子在这里,人际交往例如这里,和JS API嵌入。
sigma.js用于绘制图形的轻量级但功能强大的库
jsPlumb jQuery 插件,用于创建交互式连接图
Springy - 一种力导向的图布局算法
Processing.js处理库的 Javascript 端口,作者:John Resig
JS Graph It - 由直线连接的拖放框。线条的最小自动布局。
RaphaelJS 的 Graffle - 通用多用途矢量绘图库的交互式图形示例。RaphaelJS 不能自动布局节点;你需要另一个图书馆。
JointJS Core - David Durman 的 MPL 许可开源图表库。它可用于创建静态图表或完全交互式图表工具和应用程序构建器。适用于支持 SVG 的浏览器。核心包中未包含的布局算法
mxGraph以前的商业 HTML 5 图表库,现在在 Apache v2.0 下可用。mxGraph是在所用的碱库draw.io。
GoJS交互式图形绘制和布局库
yFiles for HTML商业图形绘制和布局库
KeyLines商业 JS 网络可视化工具包
ZoomCharts商业多用途可视化库
Syncfusion JavaScript Diagram用于绘图和可视化的商业图表库。
Cytoscape Web Embeddable JS 网络查看器(没有计划新功能;由 Cytoscape.js 接替)
jssvggraph “作为使用 SVG 对象的 Javascript 库实现的最简单的强制定向图布局算法”。2012年放弃。
Protovis可视化图形工具包 (JavaScript)。由 d3 代替。
Moo Wheel Interactive JS 表示连接和关系 (2008)
JSViz 2007 时代的图形可视化脚本
JavaScript 的dagre图形布局
免责声明:我是 Cytoscape.js 的开发人员
Cytoscape.js 是一个 HTML5 图形可视化库。API 很复杂,并遵循 jQuery 约定,包括
cy.elements("node[weight >= 50].someClass")
正如您所期望的那样),cy.nodes().unselect().trigger("mycustomevent")
),如果您正在考虑使用图形构建一个严肃的 web 应用程序,您至少应该考虑 Cytoscape.js。它是免费和开源的:
在商业场景中,一个认真的竞争者肯定是yFiles for HTML:
它提供:
这是一个示例渲染,显示了大多数请求的功能:
完全披露:我在 yWorks 工作,但在 Stackoverflow 上我不代表我的雇主。
正如 guruz 所提到的,JIT有几个可爱的图形/树布局,包括非常吸引人的 RGraph 和 HyperTree 可视化。
另外,我刚刚在 github 上发布了一个超级简单的基于 SVG 的实现(无依赖关系,~125 LOC),对于现代浏览器中显示的小图形来说,它应该足够好用。