在圆弧d3js内对齐文本

时间:2012-11-02 20:14:07

标签: svg d3.js

我正在尝试使用同心圆绘制图表,其中半径将定义各点之间的距离。我希望特定距离的所有点的标签出现在相应的shell内。我正在使用d3绘制图形。除了我无法弄清楚如何确保文本很好地呈现并与具有恒定字符宽度和字符间距的基线对齐之外,我已经完成了所有工作。我花了一整天时间试图解决这个问题,我们将非常感谢任何帮助。

这是JSFiddle

这是javascript代码

var dataset = [{label:"Hello1", value:5},{label:"Hello2", value:10 {label:"Hello3",value:15},{label:"Hello4", value:20},{label:"Hello5", value:25}];

var arc = d3.svg.arc()
  .innerRadius(function(d,i){return i*35;})
  .outerRadius(function(d,i){return (i*35+30);})
  .startAngle(0)
  .endAngle(2 * Math.PI);

var svg = d3.select("body").append("svg")
  .attr("width", 960)
  .attr("height", 500)
  .selectAll("g")
  .data(dataset)
  .enter()
  .append("g")
  .attr("transform", "translate(480,250)");

var arcs = svg.append("path")
  .attr("fill","red")
  .attr("id", function(d,i){return "s"+i;})
  .attr("d",arc);

var thing = svg.append("g")
  .attr("id","thing")
  .style("fill","navy");

thing.append("text")
  .style("font-size",20)
  .attr("dy",function(d,i){return 20;})
  //.attr("alignment-baseline","middle")
  .append("textPath")
  .attr("textLength",function(d,i){return 90-i*5 ;})
  .attr("xlink:href",function(d,i){return "#s"+i;})
  .attr("startOffset",function(d,i){return 3/20;})
  .text(function(d){return d.label;})

1 个答案:

答案 0 :(得分:5)

你的意思是这样的:

http://jsfiddle.net/wcWUE/

我改变的是:

thing.append("text")
  .style("font-size",20)
  .append("textPath")
  .attr("textLength",function(d,i){return 90-i*5 ;})
  .attr("xlink:href",function(d,i){return "#s"+i;})
  .attr("startOffset",function(d,i){return 3/20;})
  .attr("dy","-1em")
  .text(function(d){return d.label;})

我也改变了戒指的顺序,这样遮挡就不是问题了。

我认为您可以创建一个单独的路径集合,可能只是在一个部分中定义以绘制文本。

但我不确定这个结果是否符合您的要求?