【问题标题】:how to merge collapsible feature in bounded force directed graph?如何在有界力有向图中合并可折叠特征?
【发布时间】:2013-12-31 12:19:44
【问题描述】:

有很多力导向图和可折叠树图的例子,但我在力导向图中找不到可折叠特征。实际上我想在有界力有向图中实现可折叠功能。两者都有不同的 json 数据文件,因此非常混乱。在我的情况下,我必须绘制具有可折叠特性的拓扑图,并且只需要实现有界力有向图。

我的json数据文件结构

{
"nodes": [
    {
        "id": 1,
        "name": "switch1",
        "children": [
            {
                "name": "port-1"
            },
            {
                "name": "port-2"
            }
        ]
    },
    {
        "id": 2,
        "name": "switch1"
    },
    {
        "id": 3,
        "name": "switch1"
    }
],
"links": [
    {
        "source": 1,
        "target": 2,
        "value": 5
    },
    .
    .
    .
]

}

在这里,开关可以与其他开关有多个连接,以便可以在力导向图中表示。但是如果端口在特定交换机下,交换机可能包含我想要折叠的端口。

【问题讨论】:

  • 类似this的可折叠力布局?
  • @LarsKotthoff 是这样的。但我需要在有限力布局中实现该功能bl.ocks.org/mbostock/1129492
  • 嗯,看起来你已经掌握了所有的部分,只需要将它们放在一起。
  • 是的.. 尝试了很多但无法集成。最令人困惑的部分是json数据文件。你能帮我吗??
  • 请看jsfiddle.net/jaydipsinh/LSHJz/2问题:无法在父节点下获取子节点。不太了解d3.js。请帮帮我

标签: d3.js force-layout


【解决方案1】:

好的,根据您的小提琴,这里是一个使用示例代码的工作小提琴 http://bl.ocks.org/mbostock/1062288

小提琴在这里:http://jsfiddle.net/robschmuecker/AA7LZ/

对 JSON 的更改如下:

JSON

var json = {
     "nodes": {
         name: 'RootNode',
         children: [{
             "switch_id": 1,
                 "name": "switch1",
                 "children": [{
                 "name": "port-1"
             }, {
                 "name": "port-2"
             }]
         }, {
             "switch_id": 2,
                 "name": "switch2"
         }, {
             "switch_id": 3,
                 "name": "switch3"
         }]
     },
         "links": [{
         "source": 1,
             "target": 2,
             "value": 5
     }]
 };

您可以看到id 字段已更改为switch_id,否则它与示例代码冲突(如果您没有,您也可以将示例代码中对id 的引用更改为其他内容控制您的 JSON)并且我添加了一个 RootNode 以使其正常工作。由于您的 JSON 中没有 size 属性,因此所有节点看起来都相同大小。

我还直接为root 引用了 JSON,而不是使用 D3 的 JSON 函数,如下所示:

JAVASCRIPT:

 /*d3.json("readme.json", function(json) {
  root = json;
  update();
});*/

 // Now get at the nodes you want displayed
 root = json.nodes;
 update();

【讨论】:

  • 真是个天才……!!非常感谢 :)) 让我的一天快乐@ 有一个美好的一天!
  • hii.. 代码中有一个错误,链接无法正常工作。因为它通过源和目标连接,这取决于索引 (0,1,2,..) 但在我们的例子中,我们将所有开关放在子级中,因此链接的逻辑不能考虑子级下的开关。
  • 好的 - 抱歉,它没有成功。也许如果您可以提供更多 JSON 示例代码,我们可以尝试提供更多帮助。
  • 实际上我正在绘制网络拓扑。因此,首先旨在将所有开关显示为一个圆圈,并将连接 b/w 彼此表示为链接,所以我选择有界力布局,其中 json 结构是节点和链接,但一个开关下将有多个主机,因此应该表示为可折叠所以为此,我想我们必须使用可折叠图的 json 结构。所以我们必须为这两者创建自定义 JSON。希望你明白我的意思
  • 您介意给我一些关于如何保存修改后的 json 数据版本的说明吗?我们正在尝试在用户更新后更新服务器端。非常感谢。
猜你喜欢
  • 2022-11-04
  • 2020-10-15
  • 1970-01-01
  • 2013-04-02
  • 2015-01-01
  • 1970-01-01
  • 2016-01-21
  • 2016-01-20
  • 1970-01-01
相关资源
最近更新 更多