如何在一个轴固定的情况下绘制图形布局

时间:2018-07-10 19:17:58

标签: d3.js graph-theory graph-layout dagre-d3

我正在尝试绘制一个图形布局,其中y轴坐标基于时间-是否有已知算法可以实现这一目标?我研究过dagre,但似乎排名系统纯粹是基于网络的边缘。

多个节点可能具有相同或相似的Y坐标,因此,想法是将节点水平放置,以避免节点重叠,同时保持平衡的布局。有点像附件的图像(未显示所有边缘)。根据Reingold&Tilford或Sugiyama算法,最好使重叠边缘最小化。有任何想法吗?我尝试使用固定了y坐标的D3力导向布局,它确实可以工作(尽管跳动),但是这种方法无法扩展到几百个节点。我需要处理最多5000个节点和5000个边缘,这意味着实际的渲染很可能需要使用html canvas而不是svg。

更新:以下内容应该使我对实现的目标有更好的了解(实际上,需要一些交叉点,但这是一般性的想法)。

enter image description here

以上内容可以通过以下JSON生成:

nodes: [
{id:1, date: 1531600000, duration: 3600, preds: []},
{id:2, date: 1531603600, duration: 0, preds: [1]},
{id:3, date: 1531603600, duration: 0, preds: [2]},
{id:4, date: 1531603600, duration: 7200, preds: [3]},
{id:5, date: 1531610800, duration: 7200, preds: [4]},
{id:6, date: 1531618000, duration: 0, preds: [5,8]},
{id:7, date: 1531603600, duration: 3600, preds: [1]},
{id:8, date: 1531607200, duration: 3600, preds: [7]},
{id:9, date: 1531600000, duration: 0, preds: []},
{id:10, date: 1531600000, duration: 0, preds: [9]},
{id:11, date: 1531610800, duration: 0, preds: [10,8]},
{id:12, date: 1531610800, duration: 0, preds: [12]}
]

0 个答案:

没有答案