cytoscape.js - 如何让 Cytoscape 将单独的节点组放置得更近并避免 self 边缘重叠

标签 cytoscape.js

我之前曾使用 Springy 生成力导向图。它似乎有一个非常智能的算法来避免重叠节点或链接,而且它还节约地使用可用空间:

http://getspringy.com/demo.html

不幸的是,Springy 使用 jQuery,不适合我当前的项目,正在寻找一个好的替代品。目前我正在试验 Cytoscape。我尝试了几种布局,Cose-Bilkent 似乎是迄今为止最好的。但是,我也有一些问题:

  • 指向自己的链接被绘制在其他边缘之上,这使得它们难以阅读
  • 断开连接的节点组有时彼此距离很远
  • 即使节点和边的数量很少(~15),边也经常重叠。

Orphan

在典型情况下,我会有 4-16 个节点和边。我正在寻找一种方法,以美观、紧凑的形式展示它们,并尽可能减少重叠边缘。

设置:

    randomize: true,
    nodeRepulsion: 1000,
    idealEdgeLength: 30,
    gravity: 0.1

我还测试了以下布局:

  • Klay:很多边缘重叠,有时边缘很长
  • 可乐:也有很多重叠
  • Fcose:绘制非常宽的图

Euler 似乎根本不起作用,它只是挂了我的浏览器。

最佳答案

我不知道其他人,但 cose-bilkent 和 fcose 在计算时都没有考虑自循环边缘,在布局后绘制自循环边缘与 cytoscape.js 更相关。

这两种算法都没有额外努力减少边交叉,但 fcose 通常在提供平面图的平面嵌入方面做得更好。

减少断开组件之间距离的一种方法是在两种算法中增加重力/减少重力范围。此外,在默认设置下,fcose 预计会生成比 cose-bilkent 更紧凑的布局。

关于cytoscape.js - 如何让 Cytoscape 将单独的节点组放置得更近并避免 self 边缘重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59002953/

相关文章:

javascript - 在 cytoscape js 中创建允许父子关系的层次结构布局?

javascript - 如何找到子图

javascript - Cytoscape的同心布局边缘的长度操作,可能正在使用cola.js

javascript - 我应该使用 cytoscape.js 中的什么布局名称/类型和配置来实现在每侧显示为圆形的 2 种实体的布局

javascript - Cytoscape JS 布局加载微调器

javascript - cytoscapejs - 在节点主体内嵌入 html

cytoscape.js - cytoscape.js 中节点之间的填充

javascript - 使用 cytoscape.js 在特定布局中仅排列图形节点的子集

cytoscape.js - 通过连接到 cytoscape.js 中的特定节点来过滤图形

qtip2 - 实现 cytoscape.js-qtip 的难点