gpt4 book ai didi

javascript - 如何在路径上放置文本 d3.js

转载 作者:行者123 更新时间:2023-12-04 08:17:39 24 4
gpt4 key购买 nike

我对 d3.js 有这个问题:我想在弧上放置一个文本。现在我使用的是 textPath ,效果是这样的:
enter image description here
有没有办法旋转textPath?我想获得这样的效果:
enter image description here
这是我的代码:

       path.attr("d",d3.arc()
.innerRadius(5)
.outerRadius(55)
.startAngle(Math.PI/2+angle-10 * (Math.PI / 180)) //converting from degs to radians
.endAngle(Math.PI/2+angle+10*(Math.PI/180)))
.attr("transform", function(d){return "translate("+d.x+","+d.y+") rotate("+nodesMap.get(node.id).degPathRotate+")"; })
.attr("fill", function(d) { return "red"; })
.attr("opacity", 0.8)


invisibleMap.get(node.id).angle = angle;

vis.append("text")
.append("textPath") //append a textPath to the text element
.attr("xlink:href", "#"+'p'+node.id) //place the ID of the path here
.text((nodesMap.get(node.id).totRels-nodesMap.get(node.id).shownRels))

最佳答案

我不会使用 textPath为了这。相反,我只是使用一点三 Angular 函数明确地放置文本:

<!DOCTYPE html>

<html>
<head>
<script src="https://d3js.org/d3.v6.min.js"></script>
<style>
text {
font-family: arial;
font-weight: bold;
}
</style>
</head>

<body>
<svg width="200" height="200"></svg>
<script>

var vis = d3.select('svg'),
path = vis.append('path'),
angle = 330,
xPos = 100,
yPos = 100,
innerR = 5,
outerR = 55;

path
.attr('id', 'sp')
.attr(
'd',
d3
.arc()
.innerRadius(innerR)
.outerRadius(outerR)
.startAngle(Math.PI / 2 + angle - 10 * (Math.PI / 180)) //converting from degs to radians
.endAngle(Math.PI / 2 + angle + 10 * (Math.PI / 180))
)
.attr('transform', function (d) {
return (
'translate(' +
xPos +
',' +
yPos +
') rotate(' +
30 +
')'
);
})
.attr('fill', function (d) {
return 'red';
})
.attr('opacity', 0.8);

vis
.append('text')
.text(20)
//.append('textPath') //append a textPath to the text element
//.attr('xlink:href', '#' + 'sp') //place the ID of the path here
.attr("transform", function(){
let l = outerR - innerR,
x = (l * Math.cos(angle)) + xPos,
y = (l * Math.sin(angle)) + yPos,
bbox = this.getBBox();
return "translate(" + x + "," + (y - bbox.height) + ")";
})
</script>
</body>
</html>

关于javascript - 如何在路径上放置文本 d3.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65646137/

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