如何在 D3.js SVG 网格矩形上居中文本?

dja*_*fan 5 javascript css svg d3.js

如何在 D3.js SVG 网格 rect 上水平和垂直居中文本?

这是我试图开始工作的示例:

https://jsfiddle.net/djangofan/koc74p9x/4/

var columnText = row.selectAll(".column")  // select .column val from data
    .data(function(d) { return d; })
    .enter().append("text")
    .text(function(d) { return d.chord; })
    .attr("x", function(d) { return d.x; })
    .attr("y", function(d) { return d.y; })
    .style("fill", "red");
Run Code Online (Sandbox Code Playgroud)

这就是它的样子。我希望“Gm”文本在第一个单元格中居中。如果我尝试向下调整,文本会在通过单元格的顶部边框时消失。

在此处输入图片说明

在此处输入图片说明

Ger*_*ado 6

x将和位置移动y一半宽度/高度:

.attr("x", function(d) {
    return d.x + d.width / 2;
})
.attr("y", function(d) {
    return d.y + d.height / 2;
})
Run Code Online (Sandbox Code Playgroud)

并将text-anchor和设置dominant-baselinemiddle

.attr("text-anchor", "middle")
.attr("dominant-baseline", "middle")
Run Code Online (Sandbox Code Playgroud)

最后,将文本移动到矩形的顶部(即稍后附加它们)。

这是经过这些更改的代码:

.attr("x", function(d) {
    return d.x + d.width / 2;
})
.attr("y", function(d) {
    return d.y + d.height / 2;
})
Run Code Online (Sandbox Code Playgroud)
.attr("text-anchor", "middle")
.attr("dominant-baseline", "middle")
Run Code Online (Sandbox Code Playgroud)