cytoscape.js - 哪个布局最适合 cytoscape.js?
问题描述
我们现在正在分析 cytoscape.js 的需求,我们希望了解http://js.cytoscape.org/#extensions/layout-extensions中的哪个布局扩展对我们有好处。任何人都可以帮助/指导我们选择布局吗?
我们正在考虑根据用例拥有多个布局,但是对于每个布局,我们总是希望具有快速图形渲染的高性能。
用例:-
1)我们希望在最大级别显示 20,000 个交互(边)和可能的 40,000 个交互器(节点),如果对于任何布局都无法处理,我们可以减少它。
“cise”和“fcose”可以吗?
2)如果显示少量节点/边,图形应该在视口中展开,利用任何空白空间,我认为我们需要自己这样做,但以防万一它开箱即用。
“传播”可以吗?
3) 非交叉边缘。
“ngraph.forcelayout”可以吗?
4)我们需要一个功能,其中边有父子关系,这样当用户点击父边时,子边就会出现,反之亦然。
哪种布局最适合这个用例?
解决方案
哪种布局扩展最好在很大程度上取决于您要可视化的图形类型。您可能需要尝试一些,看看哪种效果最好。
对于 DAG,最好的(根据我的经验)布局是Dagre。
依赖项:
<script src="lib/cyjs/cytoscape.min.js"></script>
<script src="lib/cyjs/dagre.js"></script>
<script src="lib/cyjs/cytoscape-dagre.js"></script>
配置:
layout: {
name: 'dagre',
rankDir: 'LR',
}
对于自动缩放,您将在实例上使用.fit()
方法。cytoscape
let cy = cytoscape(options);
...
cy.fit(cy.elements());
更一般地,.elements()
, .nodes()
, .edges()
,.$()
可用于获取可用于显示/隐藏、选择/取消选择和适合的图形元素的集合。集合还支持各种图形导航功能,如扇入/扇出树,可用于获得非常令人愉悦的图形探索 UI。
为了体验集合 API,突出显示所选节点的扇入 + 扇出树将类似于
let n = cy.$('node:selected');
if (n != null) {
// find elements to be displayed
let ns = n
.predecessors()
.union(n)
.union(n.predecessors().union(n).successors());
// display them
ns.style("display", "element");
// hide the rest of the graph
cy
.elements()
.not(ns)
.style("display", "none");
// fit the view port to the displayed elements
cy
.fit(ns.union(ns.incomers())
.union(ns.outgoers()));
}
推荐阅读
- jupyter - 如何知道我的 ipynb 是否真的在运行?
- java - 如何在循环中模拟具有迭代的服务方法?
- java - Java中的运行长度编码 - 意外输出
- php - php - 如何通过 id 获取 xml 标签
- azure - 手动更改配置文件后,Ambari 是否恢复配置?
- ios - Google 放置 iOS sdk,按 lat,long 位置获取位置
- angular - Msal Angular Preview Azure AD 同意范围和访问令牌版本错误
- ios - 使用自定义动画呈现嵌入在导航控制器中的视图控制器
- redmine - Redmine、SMTP 和 Mandrill 自定义标题模板
- django - Django 1.11 多对多