gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:55:04 30 4
gpt4 key购买 nike

如何在 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");
这就是它的样子。我希望“Gm”文本在第一个单元格中居中。如果我尝试向下调整,文本会在通过单元格的顶部边框时消失。
enter image description here
enter image description here

最佳答案

移动xy位置宽度/高度的一半:

.attr("x", function(d) {
return d.x + d.width / 2;
})
.attr("y", function(d) {
return d.y + d.height / 2;
})
并设置 text-anchordominant-baselinemiddle :
.attr("text-anchor", "middle")
.attr("dominant-baseline", "middle")
最后,将文本移动到矩形的顶部(即稍后附加它们)。
这是您进行这些更改的代码:

function gridConfig() {
var data = new Array();
var xpos = 1; //starting xpos and ypos at 1 so the stroke will show when we make the grid below
var ypos = 80;
var width = 80;
var height = 80;
var click = 0;

for (var row = 0; row < 8; row++) {
data.push(new Array());
for (var column = 0; column < 8; column++) {
data[row].push({
rowNum: row + 1,
columnNum: column + 1,
x: xpos,
y: ypos,
width: width,
height: height,
chord: randomChord()
})
// increment the x position. I.e. move it over by width variable
xpos += width;
}
// reset the x position after a row is complete
xpos = 1;
// increment the y position for the next row. Move it down height variable
ypos += height;
}
return data;
}

function randomChord() {
var textArray = ['Cm', 'D7', 'Gm', 'Cdim', 'Am', 'Em'];
return textArray[Math.floor(Math.random() * textArray.length)];
}

var gridData = gridConfig();

var grid = d3.select("#grid")
.append("svg")
.attr("width", "810px")
.attr("height", "890px");

var row = grid.selectAll(".row") // select .row val from data
.data(gridData)
.enter().append("g")
.attr("class", "row")
.append("g")
.attr("class", "column");

var column = row.selectAll(".square")
.data(function(d) {
return d;
})
.enter()
.append("rect")
.attr("class", "square")
.attr("x", function(d) {
return d.x;
})
.attr("y", function(d) {
return d.y;
})
.attr("width", function(d) {
return d.width;
})
.attr("height", function(d) {
return d.height;
})
.style("fill", "#fff")
.style("stroke", "#222");

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("rowNum", function(d) {
return d.rowNum;
})
.attr("columnNum", function(d) {
return d.columnNum;
})
.attr("x", function(d) {
return d.x + d.width / 2;
})
.attr("y", function(d) {
return d.y + d.height / 2;
})
.attr("text-anchor", "middle")
.attr("dominant-baseline", "middle")
.style("fill", "red")
.style("font-weight", "bold")
.style("font-size", "24");
<html>
<head>
<script src="https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<div id="grid"></div>
<script src="grid.js" type="text/javascript"></script>
</body>
</html>

关于javascript - 如何在 D3.js SVG 网格矩形上居中文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64723131/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com