javascript - D3 Force-Directed Tree Set 节点深度
问题描述
我正在创建一个强制导向的树(这与普通的树布局不同!)。到目前为止,我有一个基本的力导向图,但我想根据每个节点与根节点的距离来计算每个节点的深度,然后让它们朝着该深度的特定 y 轴引力。
我希望它看起来类似于此处的示例
我已经知道我必须修改我的数据以具有如下层次结构:
var children_data = {
"id": "A",
"children": [
{"id": "G"},
{"id": "E"},
{"id": "C"},
{"id": "H"},
{"id": "B",
"children": [
{"id": "F"},
{"id": "D"},
]},
]
};
但除此之外,我还缺少一些东西。我确实尝试将以下内容添加到我的刻度函数中(在此之前展平我的源数据并尝试添加深度):
var ky = 1.2 * e.alpha;
links.forEach(function(d, i) {
d.target.y += (d.target.depth * 120 - d.target.y) * ky;
});
并将深度添加到每个节点,其中节点被定义为 flattened(children_data):
function flatten(json) {
var nodes = [];
function recurse(node, depth) {
if (node.children) {
node.children.forEach(function(child) {
recurse(child, depth + 1);
});
}
node.depth = depth;
nodes.push(node);
}
recurse(json, 1);
return nodes;
}
但是我一直在树布局上遇到错误。我非常基本和破碎的 JSFiddle 在这里。它特别在第 70 行中断,
var links = d3.tree().links(flatten(children_data));
解决方案
推荐阅读
- android - 用户快照流中出现意外的 non_personalized_ads - Firebase Analytics
- sql - 获取sql日期之间
- c# - Mongo Atlas - 连接限制低?
- linux - gitlab dosent 恢复备份
- amazon-dynamodb - 如何使用 Amazon DynamoDB 对 1 对 N 关系进行建模以满足单次读取和写入?
- angular - 如何使用键值对象的键作为角度模板中其他对象的属性名称
- python - 从两个不同大小的列创建两列
- python-2.7 - 使用文本文件中的一对数字创建 python 列表-> 已解决
- delphi - 找不到从 Delphi2007 升级到 DelphiXE7 所需的包 'bdertl'/'vcljpg'
- python - 如何在 windows docker 容器中安装 python 和 ansible