在下面的代码中,创建了一个简单的饼图,但是在选中时,我无法向图表的外侧移动一个切片。
我希望单个(元素)切片位于饼图外部,其余饼图元素(切片)位于其通常位置,如下所示:
下面是我的代码:
<!DOCTYPE html>
<body>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
var data = [35, 20, 45];
var width = 300,
height = 300,
radius = 150;
var arc = d3.arc()
.outerRadius(130);
var arcLabel = d3.arc()
.outerRadius(radius - 30)
.innerRadius(radius - 20);
var pie = d3.pie()
.value(function(d) {
return d;
});
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
var emptyPies = svg.selectAll(".arc")
.data(pie(data))
.enter()
.append("g")
.attr("class", "arc")
emptyPies.append("path")
.attr("d", arc)
.style("fill", function(d, i) {
return color[i];
})
emptyPies.append("text")
.attr("transform", function(d) {
return "translate(" + arcLabel.centroid(d) + ")";
})
.text(function(d) {
return d.data;
});
</script>
2条答案
按热度按时间kq4fsx7k1#
一个简单的解决方案是创建一个不同的电弧发生器:
并且,在设置
"d"
属性时,选择要使用的电弧发生器。例如,移动红色切片:下面是修改后的代码:
wnvonmuf2#
一个简单的解决方案是使用multiple arc(),但要进行切片,我们可以使用第二个弧的arc.centroid()。下面的代码将在v5中工作。