【发布时间】:2016-02-17 04:21:00
【问题描述】:
我想使用 cytoscape.js 显示计算机网络图,我意识到这不是典型的用例。这是子网的集合(建模为复合节点),每个子网中有多个计算机工作站或服务器。子网连接到路由器、防火墙和其他构成顶层图的网络基础设施。
希望子网使用具有均匀间距的网格布局,并且为了清晰起见没有显示内部边缘,并在图表的其余部分使用类似 CoSE 的东西以适当的间距对子网进行布局。我要创建的模型视觉效果是:
对我正在尝试做的事情,或对使用现有布局完成以下三个选项有什么建议吗?我见过的所有示例一次只使用一种布局算法。
选项 1:网格然后 CoSE
- 选择每个子网(父节点)并在其上运行网格布局,强制行/列使纵横比看起来不错,子网之间的间距均匀。
- 选择所有除了子节点并运行 CoSE。
目的是保留网格位置,只让 CoSE 修改其他所有内容。我试过这个,它给出了无意义的结果。这是有缺陷的,因为复合节点的位置是从其子节点的位置推导出来的。
选项 2:先 CoSE,然后是网格
- 使用 CoSE 布局所有内容。
- 选择每个子网(父节点)并在子节点上运行网格布局。
我希望 CoSE 将子级定位得比网格紧凑得多,因此父级的 bb 更大/不同。稍后在子网上运行网格时,可能会导致偏移和间隙/重叠或视觉上较差的行/列纵横比。
选项 3:网格然后 CoSE 在多个图表上
- 在每个子网(父节点)上运行网格。
- 复制整个图,用与复合 bb 大小相同的单个大节点替换子网子节点。
- 在整个临时图上运行 CoSE 以获得格式良好的结果。
- 从临时图中提取位置以更新原始图。
这应该不会留下任何间隙或重叠,因为 CoSE 无法调整节点的大小。昂贵,但我的图表都相当小,只需要发生一次。
其他选项当然是可能的。创建结合这些功能的新布局是可能的,但目前超出了范围。也许未来的 cytoscape.js 增强功能可能是明确支持多个布局算法在单个图形上协作,每个算法负责图形的一部分。
【问题讨论】:
标签: cytoscape.js