【发布时间】:2017-02-10 14:40:31
【问题描述】:
让我首先声明我对 D3 和 Javascript 完全陌生。通过一点点实验,我试图开发一个类似于树的结构,其中节点可以有多个父节点。
输入:
带有 nodes 和 links 信息的 Json,例如,
var graph = {
"nodes": [ { "id" : 0},
{ "id" : 1},
{ "id" : 2},
{ "id" : 3},
{ "id" : 4},
{ "id" : 5}
],
"links": [ { "target": 5, "source": 1 },
{ "target": 2, "source": 0 },
{ "target": 3, "source": 4 },
{ "target": 1, "source": 2},
{ "target": 1, "source": 0 },
]
};
注意:这只是作为我如何获取数据的参考,可能是数千个节点。
输出:
我希望输出像一个树结构,有点像this,也就是说节点必须绘制在一个深度/级别的结构中,根位于顶部,同级节点以这样的方式排列尽量减少链接重叠。
我面临的问题:
- 由于我只给出节点及其源和目标,而不是它们的坐标,我必须解析整个列表计算级别,然后根据该级别划分高度,然后绘制节点。处理此类问题的最有效方法是什么?我应该深入研究算法解决方案吗?
或者
- 在 D3 中是否有一些绘图函数将此 JSON 作为输入并完成其余工作?
请注意节点可以有多个父节点,我的主要重点是以适当/分层顺序绘制这些节点,所以我面临的主要问题是计算所有节点的 X/Y 坐标如上所述输入。
请帮助我更好地理解这个主题,谢谢。
【问题讨论】:
-
我无法计算出您的预期输出。 假设零是根节点,它会是look like this。由于父/子关系失败,3 到 4 消失了……这是您的预期输出吗?
-
@Mark 实际上输入仅供参考,因为我的输入...它可能包含数千个节点,例外的输出是根节点应该出现在顶部,然后是它的子节点,以此类推,链接重叠最小。希望我能够解释自己;)
-
但是我的图表是给定您的示例数据的预期输出吗?
-
@Mark 不完全,第 1 级应该包含 0 作为根,然后它的较低级别 2 应该有 2 和 1,就像你有但是最后的第 3 级应该只有 5 与 1 连接,有不应该是第 3 级的另一个 1...感谢您指出我将使用给定输入的正确输出更新问题。
-
我建议画一张图。看了你最后的评论,我更加困惑了,原来我是:)
标签: javascript json d3.js layout