523

我有一个表示有向图的数据结构,我想在 HTML 页面上动态呈现它。这些图通常只有几个节点,可能是最上端的十个节点,所以我的猜测是性能不会有什么大不了的。理想情况下,我希望能够将它与 jQuery 挂钩,以便用户可以通过拖动节点来手动调整布局。

注意:我不是在寻找图表库。

4

5 回答 5

971

我刚刚把你可能要找的东西放在一起: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 评估了许多库,包括节点/图形库。不幸的是,没有直接链接,因此您必须过滤“图表”:选择数据Visualization.ch

以下是类似项目的列表(这里已经提到了一些):

纯 JavaScript 库

  • vis.js支持多种类型的网络/边缘图,以及时间线和 2D/3D 图表。自动布局、自动集群、弹性物理引擎、移动友好、键盘导航、分层布局、动画等。麻省理工学院由一家专门研究自组织网络的荷兰公司许可和开发。

  • Cytoscape.js - 具有移动支持的交互式图形分析和可视化,遵循 jQuery 约定。由 NIH 资助并由@maxkfranz在几所大学和其他组织的帮助下开发(见下面他的回答)。

  • JavaScript InfoVis Toolkit - Jit,一个交互式、多用途的图形绘制和布局框架。例如参见双曲树。由 Twitter dataviz 建筑师Nicolas Garcia Belmonte建造, 2010 年被 Sencha 收购

  • D3.js强大的多功能 JS 可视化库,Protovis 的继承者。请参阅力导向图示例,以及图库中的其他图示例。

  • Plotly 的JS 可视化库使用 D3.js 与 JS、Python、R 和 MATLAB 绑定。请参阅此处的 IPython 中的 nexworkx 示例、此处的人机交互示例和JS Embed 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 中使用的基础

商业图书馆

废弃的图书馆

非 Javascript 库

于 2010-03-02T19:48:15.093 回答
53

免责声明:我是 Cytoscape.js 的开发者

Cytoscape.js 是一个 HTML5 图形可视化库。该 API 非常复杂并遵循 jQuery 约定,包括

  • 用于查询和过滤的选择器(cy.elements("node[weight >= 50].someClass")如您所愿),
  • 链接(例如cy.nodes().unselect().trigger("mycustomevent")),
  • 用于绑定事件的类 jQuery 函数,
  • 元素作为集合(就像 jQuery 有 HTMLDomElements 的集合),
  • 可扩展性(可以添加自定义布局、UI、核心和集合功能等),
  • 和更多。

如果你正在考虑用图表构建一个严肃的 web 应用程序,你至少应该考虑 Cytoscape.js。它是免费和开源的:

http://js.cytoscape.org

于 2012-04-25T16:05:05.280 回答
35

JsVIS相当不错,但是对于较大的图表来说速度很慢,并且自 2007 年以来已被放弃。

prefuse是一组用于在 Java 中创建丰富的交互式数据可视化的软件工具。flare 是一个 ActionScript 库,用于创建在 Adob​​e Flash Player 中运行的可视化,自 2012 年以来被废弃。

于 2008-08-15T22:31:06.360 回答
10

在商业场景中,一个严肃的竞争者肯定是yFiles for HTML

它提供:

  • 轻松导入自定义数据(这个交互式在线演示似乎几乎完全符合 OP 的要求)
  • 通过用户手势创建和操作图表的交互式编辑(参见完整的编辑器
  • 用于自定义库的各个方面的巨大编程 API
  • 支持分组嵌套(交互式以及通过布局算法)
  • 不依赖于特定的 UI 工具包,但支持集成到几乎任何现有的 Javascript 工具包中(请参阅“集成”演示
  • 自动布局(各种样式,如“分层”、“有机”、“正交”、“树”、“圆形”、“径向”等)
  • 自动复杂的边缘路由(带避障的正交和有机边缘路由)
  • 增量和部分布局(添加和删除元素,仅略微或根本不更改图表的其余部分)
  • 支持分组和嵌套(交互式以及通过布局算法)
  • 图分析算法的实现(路径、中心性、网络流等)
  • 使用 HTML 5 技术,如 SVG+CSS 和 Canvas 以及现代 Javascript,利用属性和其他更多 ES5 和 ES6 功能(但出于同样的原因,无法在 IE 8 及更低版本中运行)。
  • 使用可以使用 UMD 加载器按需加载的模块化 API

这是一个示例渲染,显示了大多数请求的功能:

BPMN 演示创建的示例渲染的屏幕截图。

全面披露:我在 yWorks 工作,但在 Stackoverflow 上我不代表我的雇主。

于 2013-01-07T11:00:49.737 回答
7

正如 guruz 提到的,JIT有几个可爱的图形/树布局,包括非常吸引人的 RGraph 和 HyperTree 可视化。

另外,我刚刚在 github 上建立了一个超级简单的基于 SVG 的实现(无依赖关系,~125 LOC),对于现代浏览器中显示的小图来说应该足够好。

于 2010-04-03T17:01:09.063 回答