D3,SVG和textPath:如何将文本向下移动?

时间:2013-04-26 22:32:55

标签: text svg path d3.js

我有一个图表,其中一些文本使用textPath沿其中一条路径写入。但是,我的问题是:我需要文本位于文本路径的另一侧,即位于其下方。

以下是一个例子:

Currently Sits on the Outside

我需要此处的文字位于纯蓝色区域内。即,所以你可以真正阅读它。这里的蓝色弧是textPath。换句话说,我只想将文本向下移动大约20px。

真让我困惑的是,我可以在文本上设置“x”属性并左右移动,但我无法设置“y”属性来向上或向下移动。

我无法理解。有人可以帮忙吗?

这是我的代码

  var labels = svg.selectAll("text.label")
      .data(partition.nodes(data))
     .enter()
      .append("text")
      .attr("class", "label")
      .attr("x", 10)
      .attr("stroke","black")
      .style("background-color",'white')

    labels.append("textPath")
      .attr("xlink:href", function(d) { return '#' + d.name })
      .text(function(d) { return d.name.capitalize() })

2 个答案:

答案 0 :(得分:17)

您可以使用dy属性更改垂直对齐方式。

答案 1 :(得分:1)

创建JS小提琴示例,在D3强制布局图表中显示链接上的标签

参见JS Fiddle的工作演示:http://jsfiddle.net/bc4um7pc/

var linktext = svg.append("svg:g").selectAll("g.linklabelholder").data(force.links());

linktext.enter().append("g").attr("class", "linklabelholder")
 .append("text")
 .attr("class", "linklabel")
 .style("font-size", "13px")
 .attr("dx", "30")
 .attr("dy", "-5")
 .attr("text-anchor", "start")
 .style("fill","#000")
 .append("textPath")
 .attr("xlink:href",function(d,i) { return "#linkId_" + i;})
 .text(function(d) { 
 return d.type; 
 });