Javascript 是否可以将D3.tree()用于包含父数据集而不是子数据集?
我正在使用D3创建一个家谱。我的数据集确实是分层的,但树的根节点是子节点。每个“子节点”包含两个“父节点”,表示每个子节点的两个父节点。下面是我的数据示例Javascript 是否可以将D3.tree()用于包含父数据集而不是子数据集?,javascript,d3.js,tree,Javascript,D3.js,Tree,我正在使用D3创建一个家谱。我的数据集确实是分层的,但树的根节点是子节点。每个“子节点”包含两个“父节点”,表示每个子节点的两个父节点。下面是我的数据示例 { name: "Morgans Jumpin Jack Flash", imagePath: "", description: "", subTitle: "", body: "", icon: "", iconColor: "", gender: "m", p
{
name: "Morgans Jumpin Jack Flash",
imagePath: "",
description: "",
subTitle: "",
body: "",
icon: "",
iconColor: "",
gender: "m",
parents: [
{
name: "Moganas Heart of Fire",
imagePath: "",
description: "",
subTitle: "",
body: "",
icon: "",
iconColor: "",
gender: "f",
parents: [
{
name: "Elkhaus Ice Storm",
imagePath: "",
description: "",
subTitle: "",
body: "",
icon: "",
iconColor: "",
gender: "m",
parents: []
},{
name: "Morganas First Love",
imagePath: "",
description: "",
subTitle: "",
body: "",
icon: "",
iconColor: "",
gender: "f",
parents: []
},
]
},{
name: "Desperado Hogan von der Accani",
imagePath: "",
description: "",
subTitle: "",
body: "",
icon: "",
iconColor: "",
gender: "m",
parents: [
{
name: "Jim von Aurachgrund",
imagePath: "",
description: "",
subTitle: "",
body: "",
icon: "",
iconColor: "",
gender: "m",
parents: []
},{
name: "Heroina D. Altobella",
imagePath: "",
description: "",
subTitle: "",
body: "",
icon: "",
iconColor: "",
gender: "f",
parents: []
},
]
},
]
}
树中的每个节点代表一只狗。这里的想法是,你可以看到一个给定的狗谱系通过向上的家庭树的父母,祖父母,等等
是否可以在不修改数据的情况下将给定的数据集与d3.tree()一起使用?(我知道我可能只是将“parents”重命名为“children”,但这会让下一个查看数据集的人感到非常困惑。)您不需要更改原始数据集,而是在使用d3.hierarchy创建根时,您可以指定哪个属性包含“children”: 第二个参数是“child”访问器,但您可以使用它来表示父对象。我刚刚保留了从左到右的布局,但将其更改为从右到左的布局是相当简单的:
var数据={
姓名:“摩根跳杰克闪光”,
图像路径:“”,
说明:“,
副标题:“,
正文:“,
图标:“”,
iconColor:“”,
性别:“m”,
家长:[
{
名称:“摩加那火之心”,
图像路径:“”,
说明:“,
副标题:“,
正文:“,
图标:“”,
iconColor:“”,
性别:“f”,
家长:[
{
名称:“埃尔克豪斯冰暴”,
图像路径:“”,
说明:“,
副标题:“,
正文:“,
图标:“”,
iconColor:“”,
性别:“m”,
家长:[]
},{
名字:“摩根纳的初恋”,
图像路径:“”,
说明:“,
副标题:“,
正文:“,
图标:“”,
iconColor:“”,
性别:“f”,
家长:[]
},
]
},{
姓名:“亡命之徒霍根·冯·德阿卡尼”,
图像路径:“”,
说明:“,
副标题:“,
正文:“,
图标:“”,
iconColor:“”,
性别:“m”,
家长:[
{
姓名:“吉姆·冯·奥拉奇格兰德”,
图像路径:“”,
说明:“,
副标题:“,
正文:“,
图标:“”,
iconColor:“”,
性别:“m”,
家长:[]
},{
姓名:“女英雄D.阿尔托贝拉”,
图像路径:“”,
说明:“,
副标题:“,
正文:“,
图标:“”,
iconColor:“”,
性别:“f”,
家长:[]
},
]
},
]
}
var root=d3.层次结构(数据、函数(d){
返回d.父母;
})
var宽度=500;
var高度=300;
var-margin={左:100,上:50,右:100,下:50};
var svg=d3.选择(“主体”)
.append(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度)
var g=svg.append(“g”)
.attr(“转换”、“平移”(+margin.left+)、“+margin.top+”);
var tree=d3.tree().size([height margin.top margin.bottom,width margin.left margin.right]);
var path=d3.linkHorizontal().x(函数(d){return d.y;}).y(函数(d){return d.x;})
变量布局=树(根);
var link=g.selectAll(空)
.data(layout.links())
.enter().append(“路径”)
.attr(“类”、“链接”)
.attr(“d”,路径)
var text=g.selectAll(空)
.data(根目录下的子目录())
.enter().append(“文本”)
.attr(“transform”,函数(d){return“translate”(“+d.y+”,“+d.x+”)”);})
.text(函数(d){return d.data.name;})
.attr(“y”,-15)
.attr(“x”,-10)
var node=g.selectAll(空)
.data(根目录下的子目录())
.enter().append(“圆”)
.attr(“transform”,函数(d){return“translate”(“+d.y+”,“+d.x+”)”);})
.attr(“类”、“节点”)
.attr(“r”,函数(d){返回d.data.name==”?0:8;})代码>
路径{
填充:无;
冲程:#888;
笔画宽度:2px;
}
var root = d3.hierarchy(data, function(d) {
return d.parents;
})