gpt4 book ai didi

javascript - D3.js - 如何防止圆圈和文本重叠

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:34 25 4
gpt4 key购买 nike

为每个 json 创建一个圆圈并随机输出 x 和 y

for(var d = 0; d<json.length; d++){
circlexloc[d] = ((Math.random()*2*r)-r);
circleyloc[d] = ((Math.random()*2*r)-r);
};

声明一个圆变量,同时设置属性和动画

var circle = svg.selectAll("circle").data(json)

circle.enter().append('circle')

动画

circle.transition()
.duration(1000)
.attr("fill", "blue")
.attr('opacity',0.6)
.attr('r', 5)

.attr("cx", function(d, i) {return circlexloc[i] })
.attr("cy", function(d, i) {return circleyloc[i] });

circle.exit().transition().duration(1000)
.attr('opacity',0)
.attr("r",0)
.remove();

把技术贴在圈子上

 var text = svg.selectAll('text')
text.data(json)
.enter().append("svg:text")
.style("font-size", "10px")
.text(function(d) { return d.TechName; })
.transition().duration(1000)
.attr('opacity', 1)
.attr("x", function (d, i) { return (circlexloc[i]+6)})
.attr("y", function (d, i) { return (circleyloc[i]+4)});

});

目前,它们有时会相互重叠。我怎样才能防止这种情况发生?建议和示例将不胜感激 - 谢谢。

最佳答案

您有几个不同的选择,具体取决于您要追求的目标。

一种方法是使用力导向布局,向节点施加力,以确保它们在达到稳定状态后不会重叠(请注意,它们在达到稳定状态时可能会重叠)。您可以在 http://bl.ocks.org/1377729 上看到这样的示例.请注意,您可以完全自定义节点的外观并消除线条。

我在 http://jsfiddle.net/xwZjN/2/ 创建了一个基于强制布局的示例.使用基于力的布局,您需要先添加节点。

   force
.nodes(nodes)
.start();

然后为每次力重新计算更新它们的位置。

   force.on("tick", function() {

text.attr("x", function(d) { return d.x + 6; })
.attr("y", function(d) { return d.y + 4; });

node.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
});

另一种选择是使用 pack 布局,如 http://bl.ocks.org/1628131 中的示例.这种布局会将圆圈紧紧地放在一起,并确保它们不重叠。

关于javascript - D3.js - 如何防止圆圈和文本重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12944024/

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