[英]d3 sunburst without strict parent-child relationships
我想在d3.js中创建朝阳,其中某些节点未遵循严格的父子关系。
下面的示例图可以最好地说明我的节点遵循的关系。
具体而言,围绕根节点的第一个圆圈定义了一些类别(A,B,C或D),并且所有后续圆圈中的每个节点都将严格地属于这些广义类别中的一个。 也就是说,没有节点会越过我绘制的灰色铅笔线。 但是,在随后的每个同心圆上,不再严格认为节点将严格属于其父节点。 例如,请注意,值为0.3的绿色节点始终严格地是类别A的子级,而严格来说并不是紫色或红色节点的子级:它越过边界。
如何在d3中表示呢? 这是我的一些潜在想法,我很乐意就最有意义的一个提出建议。
选项2似乎很容易实现,因此我给了它一个机会,并在每个节点的数据点上添加了一个指定如何拆分该节点的附加数组。 因此,我的图形(省略了B,C和D)将由以下数据表示:
{
"name": "A1",
"arcs": [1],
"value": 1,
"children": [
{
"name": "A2",
"arcs": [0.4, 0.6],
"value": 1,
"children": [
{
"name": "A3",
"arcs": [0.3, 0.3, 0.4],
"value": 1,
"children": [
{
"name": "A4",
"arcs": [0.2, 0.4, 0.2, 0.2],
"value": 1,
"children": []
}
]
}
]
}
]
}
但是,我正在努力弄清楚如何在每个节点上绘制多个弧。 我目前有以下代码,它为每个节点绘制一条弧,而我不知如何修改它以绘制多条弧,而对d.arcs
数组中的每个元素绘制一条弧:
var arcGenerator = d3.svg.arc()
.startAngle(function(d) { return d.x; })
.endAngle(function(d) { return d.x + d.dx; })
.innerRadius(function(d) { return Math.sqrt(d.y); })
.outerRadius(function(d) { return Math.sqrt(d.y + d.dy); });
var path = sunburst_plot.datum(data_root).selectAll("path")
.data(partitionLayout.nodes)
.enter()
.append("path")
.attr("display", function(d) { return d.depth ? null : "none"; }) // hide inner ring
.attr("d", arcGenerator)
.style("stroke", "#fff")
.style("fill", "#000")
.style("fill-rule", "evenodd")
是否有人建议如何进行操作,可能是通过重新考虑我的数据结构而不使用分区布局,还是以某种方式在d3的enter()
方法之下,可能是在d.arcs
数组中的每个元素上运行了某种循环? 我欢迎任何建议。
谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.