Javascript 是否可以将D3.tree()用于包含父数据集而不是子数据集?

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

我正在使用D3创建一个家谱。我的数据集确实是分层的,但树的根节点是子节点。每个“子节点”包含两个“父节点”,表示每个子节点的两个父节点。下面是我的数据示例

    {
    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;  
})