javascript - 使用 Sigma.js 以循环方式放置节点
问题描述
我有一个树状结构的网络。我想以圆形的形式放置在同一级别发生的节点。因此,可以将一个级别可视化为同心圆。
我想使用 Sigma.js 来做到这一点。
假设我知道每个节点的级别。那么如何选择节点的x和y坐标。
节点和边的数据在一个 json 文件中。
解决方案
有一个例子,它把它的节点从网格动画到圆圈:
https ://github.com/jacomyal/sigma.js/blob/master/examples/animate.html
for (i = 0; i < N; i++) {
o = {
id: 'n' + i,
label: 'Node ' + i,
circular_x: L * Math.cos(Math.PI * 2 * i / N - Math.PI / 2),
circular_y: L * Math.sin(Math.PI * 2 * i / N - Math.PI / 2),
circular_size: Math.random(),
circular_color: '#' + (
Math.floor(Math.random() * 16777215).toString(16) + '000000'
).substr(0, 6),
grid_x: i % L,
grid_y: Math.floor(i / L),
grid_size: 1,
grid_color: '#ccc'
};
您只需定义 x/y 位置(请参阅 circular_x 和 ciruclar_y),将节点定位在一个圆圈中。
networkx 等库有算法来帮助你计算这些位置:
https ://networkx.github.io/documentation/stable/auto_examples/drawing/plot_circular_tree.html
使用 networkx 生成图形对象后(通常G
在文档中),您可以使用导出函数之一来检索底层图形数据(例如节点位置):
https ://networkx.github.io/documentation/stable /reference/readwrite/index.html
推荐阅读
- android - 以编程方式更改页面时如何减慢 ViewPager2 中的过渡动画
- python - 从 FITS 文件中仅提取几列,该文件可在线免费使用 python 下载
- python - 在 setup.py 中安装“脚本”作为 Python 包的一部分,在用户路径上并被识别为 Python 脚本
- javascript - 转到 Vue.js 中的 $router url 目的地后,如何防止我的 $router 参数消失?
- algorithm - 是否存在一种稳定的排序算法,可以以 O(n) 时间复杂度和 O(1) 辅助空间复杂度对二进制数组进行排序?
- typescript - 从打字稿中的数组中的字符串派生键以定义对象属性名称
- jupyter-notebook - 在 Jupyter 实验室中选择一行是否有键盘快捷键?
- c# - 如何在需要抽象父类型的地方使用子类型
- mongodb - 什么查询在 MongoDB 中使用更少的资源?
- python - 使用 Bash 添加到 Python 路径