Javascript d3.js如何正确地为树布局按摩我的数据?

Javascript d3.js如何正确地为树布局按摩我的数据?,javascript,json,d3.js,Javascript,Json,D3.js,我很难找到正确的方法来正确构造json数据,以实现d3.js所需的功能 我的内容是由“文章”组成的,在多对多的关系中有“标签”。 因此,一篇文章可以有几个标签,一个标签可以有几个文章 我希望将我的内容表示为节点树,方式如下: 但现在,标签和帖子被复制了好几次,例如: 如何避免标记和张贴重复,而是让线条指向正确的节点?还是有更好的方式格式化json数据以实现这种可视化 您可以在上看到我的代码正在运行。 以下是数据: var json_data= { "name": "Histoire

我很难找到正确的方法来正确构造json数据,以实现d3.js所需的功能

我的内容是由“文章”组成的,在多对多的关系中有“标签”。 因此,一篇文章可以有几个标签,一个标签可以有几个文章

我希望将我的内容表示为节点树,方式如下:

但现在,标签和帖子被复制了好几次,例如:

如何避免标记和张贴重复,而是让线条指向正确的节点?还是有更好的方式格式化json数据以实现这种可视化

您可以在上看到我的代码正在运行。 以下是数据:

var json_data= {
    "name": "Histoire du Web",
    "children": [
        {
            "name": "américain",
            "type": "tag",
            "count": "1",
            "children": [
                {
                    "name": "jeff atwood",
                    "type": "article",
                    "count": 7
                }
            ]
        },
        {
            "name": "american",
            "type": "tag",
            "count": "2",
            "children": [
                {
                    "name": "Doug Englebart",
                    "type": "article",
                    "count": 5
                },
                {
                    "name": "jeff atwood",
                    "type": "article",
                    "count": 7
                }
            ]
        },
        {
            "name": "coding horror",
            "type": "tag",
            "count": "1",
            "children": []
        },
        {
            "name": "développeur",
            "type": "tag",
            "count": "1",
            "children": [
                {
                    "name": "jeff atwood",
                    "type": "article",
                    "count": 7
                }
            ]
        },
        {
            "name": "Engelbart's Law",
            "type": "tag",
            "count": "1",
            "children": []
        },
        {
            "name": "entrepreneur",
            "type": "tag",
            "count": "1",
            "children": [
                {
                    "name": "jeff atwood",
                    "type": "article",
                    "count": 7
                }
            ]
        },
        {
            "name": "forum",
            "type": "tag",
            "count": "1",
            "children": [
                {
                    "name": "jeff atwood",
                    "type": "article",
                    "count": 7
                }
            ]
        },
        {
            "name": "hypertext",
            "type": "tag",
            "count": "1",
            "children": [
                {
                    "name": "Doug Englebart",
                    "type": "article",
                    "count": 5
                }
            ]
        },
        {
            "name": "interaction",
            "type": "tag",
            "count": "1",
            "children": [
                {
                    "name": "Doug Englebart",
                    "type": "article",
                    "count": 5
                }
            ]
        },
        {
            "name": "mouse",
            "type": "tag",
            "count": "1",
            "children": [
                {
                    "name": "Doug Englebart",
                    "type": "article",
                    "count": 5
                }
            ]
        },
        {
            "name": "stackoverflow",
            "type": "tag",
            "count": "1",
            "children": [
                {
                    "name": "jeff atwood",
                    "type": "article",
                    "count": 7
                }
            ]
        }
    ]
};

在节点共享父节点的情况下,使用树布局表示数据并不容易,但是这是可能的,可以在此处找到详细说明:

从链接:

当然,可以应用一些残酷的黑客攻击,例如复制部分树以将多个父级转换为与单个父级相同的许多倍,但使用真正的图形布局机制(如d3.layout.force)并应用适当的约束使其执行所需操作可能是更好的选择