8

我一直在谷歌搜索,但我似乎无法掌握这一点。

我的情况是,在饼图上显示的国家/地区重叠:

这是正在发生的事情的一个例子:

jsfiddle

在此处输入图像描述

我是一个完全的初学者,D3并试图防止文本重叠。是否有像我可以添加的文本边距属性这样我的标签不会相互重叠?

4

2 回答 2

12

更新:如果有足够的空间来提供更全面的解决方案,请参阅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; });
于 2013-01-26T20:02:23.387 回答
3

另一种解决方案是改变数据的顺序,美国是第一位的。您可能会发现饼图布局的角度更具可读性。

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

http://jsfiddle.net/2uT7F/26/

您需要创建一个 if else 块来处理 USA 项目,但如果有帮助,这是一个开始。

于 2015-01-26T01:11:26.380 回答