我是d3可视化的新鲜蜜蜂。目前正在为数据沿袭创建d3树布局可视化。在数据沿袭流中,子节点可以从多个父节点派生。这是一个例子。在下面的示例中,一个“devlead”可以与两个经理一起工作。
var data = [
{ "name": "Director", "parent": "null", "depth": 0 },
{ "name": "Manager1", "parent": "Director", "depth": 1 },
{ "name": "Manager2", "parent": "Director", "depth": 1 },
{ "name": "DevLead", "parent": "Manager1", "depth": 2 },
{ "name": "DevLead", "parent": "Manager2", "depth": 2 }
];
正在获取输出,请参阅下面的图片附件。
我想看到“devlead”子级应该只显示一个,并且应该有“manager1”和“manager2”的派生。有谁能帮上忙吗。
2条答案
按热度按时间gg0vcinb1#
d3树布局不完全支持多个父级
你能做什么?
使用网络图代替-缺点是节点定位困难
我有类似的要求,并尝试建立网络图类似的树布局,但当有许多节点,它变得混乱。。。
你可以在codepen上查看
使用hack on tree布局-从其他节点绘制附加链接
检查这个例子
另一个使用隐藏节点的黑客——JSFIDLE
此外,我认为,这些链接将进一步帮助您:
d3.js中的家族树
d树库-具有多个父级的数据
如果使用第一个选项,您可以通过删除和添加数据中的节点来处理此代码段
os8fio9y2#
使用hack on tree布局-从其他节点绘制附加链接检查此示例
如果黑客是您正在寻找的解决方案,下面的实现可能会有所帮助。这是一个基于rob schmueckers博客多父节点d3.js示例的d3可折叠树,可以处理多个父链接和基本树事件。它通常分为两部分
index.html
构建html结构,一个样式表style.css
而实际的剧本呢tree.js
index.html
:定义一个id为的div
tree_view
后来拿着树。呼叫tree.js
创建树。tree_view {
width: 100%;
height: 100%;
margin-top: 30px;
}
/* basic node */
.node {
cursor: pointer;
text-anchor: start;
}
/* rectangle node */
.node rect {
stroke: gray;
stroke-width: 1.5px;
}
/* node text */
.node text {
font: 12px sans-serif;
}
/* standard links (.link) and multiparent links (.mpLink) */
.link, .mpLink {
fill: none;
stroke: #ccc;
}
```
tree.js
:(完整代码如下)基本上,您需要为要添加的每个附加链接定义一个新的链接对象。每个链接都需要一个源节点和目标节点。备份节点是事件处理所必需的:
现在,您可以处理更新过程中的所有附加链接(
updateTree(source)
):并在方法中定义on事件行为
click(d)
.全部
tree.js
代码:在这里你可以找到完整的演示。你也可以用叉子叉这个项目。