JavaScript中的图形可视化库


523

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

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


Answers:


922

我已经汇总了您可能要查找的内容:http : //www.graphdracula.net

它是带有定向图布局的SVG JavaScript,甚至可以拖动节点。仍需要一些调整,但完全可用。您可以使用以下JavaScript代码轻松创建节点和边:

var g = new Graph();
g.addEdge("strawberry", "cherry");
g.addEdge("cherry", "apple");
g.addEdge("id34", "cherry");

我使用了前面提到的Raphael JS库(涂鸦示例)以及一些代码,这些代码用于在网上找到的基于力的图形布局算法(所有开源程序,MIT许可证)。如果您有任何意见或需要某些功能,我可以实施,只问一下!


您可能还想看看其他项目!以下是两个元比较:

  • SocialCompare有大量的库列表,“节点/边线图”行将过滤图的可视化。

  • DataVisualization.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可视化库使用具有JS,Python,R和MATLAB绑定的D3.js。见IPython的一个nexworkx例子在这里,人际交往例如这里,和JS API嵌入

  • sigma.js轻巧但功能强大的图形库

  • jsPlumb jQuery插件,用于创建交互式连接图

  • Springy-力导向图布局算法

  • John Resig的Processing库的Processing.js Javascript端口

  • JS Graph It-拖放通过直线连接的框。最小的线路自动布局。

  • RaphaelJS的Graffle-通用多功能矢量绘图库的交互式图形示例。RaphaelJS无法自动布置节点;您将需要另一个库。

  • JointJS核心 -David Durman的MPL许可的开源图表库。它可用于创建静态图或完全交互式的绘图工具和应用程序构建器。在支持SVG的浏览器中工作。核心软件包未包含的布局算法

  • mxGraph以前的商业HTML 5图表库,现在在Apache v2.0下可用。mxGraph是在所用的碱库draw.io

商业图书馆

废弃的图书馆

  • Cytoscape Web嵌入式JS网络查看器(未计划新功能;由Cytoscape.js继承)

  • 用于Graphviz图的Canviz JS 渲染器。2013年9月遗弃

  • arbor.js复杂的图形绘制,具有良好的物理特性和令人眼前一亮的糖果。2012年5月废弃。存在几个半维护的货叉。

  • jssvggraph “实现为使用SVG对象的Javascript库的最简单的力导向图布局算法”。2012年被遗弃。

  • jsdot客户端图形绘制应用程序。2011年废弃

  • Protovis用于可视化的图形工具包(JavaScript)。替换为d3。

  • Moo Wheel用于连接和关系的Interactive JS表示形式(2008)

  • JSViz 2007时代的图形可视化脚本

  • dagre JavaScript的图形布局

非JavaScript库


4
是的,可能会出现定向边缘!使用g.addEdge(“ cherry”,“ apple”,{“ directed”:true});
约翰·菲利普·斯特拉特豪森,2010年

还需要添加chart.js和chartnew.js库。而此(chart.livegap.com)是为此生成的
Omar Sedki

1
可以将另外两个值得注意的库添加到列表中,即Linkuroius.jsVivaGraphJS
卢卡斯ķ

2
yFILES布局算法是否有任何开源替代方案?例如yworks.com/products/yfiles-layout-algorithms-for-cytoscape
Ryan Chou

1
我制作了一个免费的轻量级库,可能对其他人有用:github.com/n-yousefi/Arg-Graph
Naser Yousefi

48

免责声明:我是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


6
所有API都有完整记录。文档甚至会逐步引导您入门(即init)。有对个人API的运行实例,并有现场演示。该功能远远超过了任何JS图形库,并且文档比大多数项目(无论是商业项目还是开源项目)都要广泛。您在文档中到底缺少什么?
maxkfranz

3
好,对不起,我不好。我看起来不太舒服。是的,有据可查。
风暴

它是否有一种按层次结构排列图的方法(一种看起来像树的布局,但实际上是一个图,意味着有多个父节点的节点)
Mina

dagre和广度优先的布局都适用于这种情况
maxkfranz

我需要使用箭头的“开始”和“结束”拖放来编辑图形。这个库说那些东西是不可变的。所以我需要寻找另一个图书馆...
尤金(Eugene Gr)。Philippov

35

JsVIS相当不错,但是随着较大的图形速度变慢,并且自2007年以来已被放弃。

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


2
这些库在这一点上似乎有些陈旧,今天人们在使用什么?我正在专门研究绘制独立的xy系列。
blong 2012年

22
-1-prefuse是Java,而不是JavaScript。Flare是Flash,也不是JavaScript。JsVIS越野车过时了。
anatoly techtonik'4

2
@animuson:另一个离题的话题:OP要求JavaScript库。答案中有关JS的唯一部分是自2007
。– Dan Dascalescu 2014年

10

在商业场景中,可以肯定的是,认真的竞争者是yFiles for HTML

它提供:

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

这是显示大多数所需功能的示例渲染:

BPMN演示创建的示例渲染的屏幕快照。

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


3
最好的算法集合,但也最封闭,因此无法在开源项目中使用:-(
forresto 2014年

1
“最佳收藏”可能是正确的,但“最封闭”是相对的,“不可能”是不正确的:它是商业许可证,因此除非开源项目使用病毒许可证,否则它可以用于开源项目。当然,在其他开放源代码项目中使用开放源代码项目的问题较少...
Sebastian 2014年

1
您似乎不了解开源的工作原理。您是在说您的公司可以授予开放源代码项目向无限开发人员使用该软件的权利,也可以向固定费用的一次性费用将其分发给无限开发人员,贡献者和测试人员的权利吗?当然不是
费利克斯Saparelli

2
@FélixSaparelli:相信我:我愿意。您所描述的是可能的,并且之前已经做过类似的事情。您正在链接到标准许可条款,但是自定义协议当然是可能的,并且之前已经达成协议。但是,这不是讨论此问题的正确位置。随时直接与yWorks联系。
塞巴斯蒂安2015年

7

正如古鲁兹所说,准时制具有几种可爱的图形/树布局,包括颇具吸引力的RGraph和HyperTree可视化。

另外,我刚刚在github上提出了一个基于SVG的超级简单的实现(无依赖项,〜125 LOC),对于现代浏览器中显示的小图形来说,应该已经足够好了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.