Hier ist mein Anwendungsfall: Ich erstelle einen Sonnenstoß mit d3. Innerhalb jedes Knotens möchte ich den Text zentrieren. Es scheint nicht zu funktionieren. Ich habe versucht, hier die Methode erwähnt werden: d3js - how to add the text each of the arc's centre, after animation end? Aber es scheint nicht zu funktionieren: https://codepen.io/yonatankra/pen/awEYgR?editors=0010Zentrieren von Text in einem Bogen mit d3
Genauer gesagt:
var text = svg.selectAll(".node").append("text")
.attr("text-anchor","middle")
.attr("x", function(d) {
const middleRadius = d.y1 - d.y0;
arc = d3.arc().innerRadius(middleRadius - 1).outerRadius(middleRadius + 1);
const x = arc.centroid(d);
return x[0]*Math.cos(x[1]);
})
.attr("y", function(d) {
const middleRadius = d.y1 - d.y0;
arc = d3.arc().innerRadius(middleRadius - 1).outerRadius(middleRadius + 1);
const x = arc.centroid(d);
return middleRadius*Math.sin(x[1]);
})
/* .attr("dy", "-28") */
// .attr("dx", "6") // margin
// .attr("dy", ".35em") // vertical-align
.text(function(d) {
return d.data.name
})
Ich habe auf verschiedene Weise versucht, und haben bereit mehrere Anleitungen, wie dies zu tun ist, aber nichts funktioniert wie erwartet.
Wie würden Sie den Code ändern, um den Text in der Mitte des Bogens einzugeben? Und eine weitere theoretische Frage - warum gibt das arc.centroid die gleichen Werte für verschiedene Bögen zurück?
Awesome! Vielen Dank! Hier ist die vollständige Lösung, wenn jemand interessiert ist: https://codepen.io/yonatankra/pen/Zyvmgr?editors=0010 – yccteam