使用d3.js绘制一个旭日形图的扇区

时间:2016-07-01 06:36:49

标签: d3.js sunburst-diagram

我需要绘制一个像这样的旭日形图:

enter image description here

如您所见,这实际上是旭日图的一个部分。我可以为主圆/弧设置startAngle和endAngle吗?

修改 我的图表如下: https://bl.ocks.org/mbostock/4063423

2 个答案:

答案 0 :(得分:2)

这是你在找什么?

enter image description here

以下是变化部分:

var partition = d3.layout.partition()
    .sort(null)
    .size([Math.PI, radius * radius]) // Previoulsy : .size([2 * Math.PI, radius * radius])
    .value(function(d) { return 1; });

var arc = d3.svg.arc()
    .startAngle(function(d) { return d.x - Math.PI / 2; }) // Previously : .startAngle(function(d) { return d.x; })
    .endAngle(function(d) { return d.x + d.dx - Math.PI / 2; }) // Previously : .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); });

查看现场演示:JSFiddle

答案 1 :(得分:1)

你绝对可以将startAngle和endAngle设置为圆圈。

请参阅sunburst图中的代码片段。

var arc = d3.svg.arc()
        .startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })
        .endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })
        .innerRadius(function(d) { return Math.max(0, d.y ? y(d.y) : d.y); })
        .outerRadius(function(d) { return Math.max(0, y(d.y + d.dy)); });