我一直在谷歌搜索,但我似乎无法掌握这一点。
我的情况是,在饼图上显示的国家/地区重叠:
这是正在发生的事情的一个例子:
我是一个完全的初学者,D3
并试图防止文本重叠。是否有像我可以添加的文本边距属性这样我的标签不会相互重叠?
更新:如果有足够的空间来提供更全面的解决方案,请参阅D3 将弧标签放入饼图中的答案。
我不知道放置文本元素以使它们不重叠的任何通用方法。
但是,通过旋转标签和缩放图形以使它们不重叠,可以解决您的问题:http: //jsfiddle.net/2uT7F/
// Get the angle on the arc and then rotate by -90 degrees
var getAngle = function (d) {
return (180 / Math.PI * (d.startAngle + d.endAngle) / 2 - 90);
};
g.append("text")
.attr("transform", function(d) {
return "translate(" + pos.centroid(d) + ") " +
"rotate(" + getAngle(d) + ")"; })
.attr("dy", 5)
.style("text-anchor", "start")
.text(function(d) { return d.data.label; });
另一种解决方案是改变数据的顺序,美国是第一位的。您可能会发现饼图布局的角度更具可读性。
var data_values = [48, 1, 1, 1, 1, 1, 1, 4];
var titles = ["USA","Pakistan", "Israel", "Netherlands", "Italy", "Uruguay", "United Kingdom", "Austria", "China"]
http://jsfiddle.net/rocky1616/oLzsrd4o/
Musically_ut 的解决方案在这里也可以很好地工作。如果这在您的设计中有效,您甚至可以将角度降低一点。
var getAngle = function (d) {
return (180 / Math.PI * (d.startAngle + d.endAngle) / 2 + 45);
};
您需要创建一个 if else 块来处理 USA 项目,但如果有帮助,这是一个开始。