为了增加Scott的答案,dy与em(字体大小单位)一起使用对于相对于绝对y坐标垂直对齐文本非常有用。在MDN dy文本元素示例中对此进行了介绍。
使用dy = 0.35em可以帮助垂直居中放置文本,而不管字体大小如何。如果要围绕绝对坐标所描述的点旋转文本中心,这也很有帮助。
<style>
text { fill: black; text-anchor: middle; }
line { stroke-width: 1; stroke: lightgray; }
</style>
<script>
dataset = d3.range(50,500,50);
svg = d3.select("body").append("svg");
svg.attr('width',500).attr('height', 500);
svg.append("line").attr('x1', 0).attr('x2', 500).attr('y1', 100).attr('y2', 100);
svg.append("line").attr('x1', 0).attr('x2', 500).attr('y1', 200).attr('y2', 200);
group = svg.selectAll("g")
.data(dataset)
.enter()
.append("g");
// Without the dy=0.35em offset
group.append("text")
.text("My text")
.attr("x",function (d) {return d;})
.attr("y",100)
.attr("transform", function(d, i) {return "rotate("+45*i+","+d+",100)";});
// With the dy=0.35em offset
group.append("text")
.text("My text")
.attr("x",function (d) {return d;})
.attr("y",200)
.attr("dy","0.35em")
.attr("transform", function(d, i) {return "rotate("+45*i+","+d+",200)";});
<script>
在Codepen中查看
如果您不包括“ dy = 0.35em”,则单词将围绕文本底部旋转,并在旋转180字后低于其位置。包括“ dy = 0.35em”可使它们绕文本中心旋转。
请注意,不能使用CSS设置dy。
d3.js
,它用于组合不同的单位。像x="3" dx="0.5em"
这样等于3像素+一半的文字行。