gpt4 book ai didi

d3.js - 可缩放圆包上的“d3-circle-text”

转载 作者:行者123 更新时间:2023-12-04 10:16:21 25 4
gpt4 key购买 nike

'd3-circle-text' 插件在静态 circle-pack 上运行良好(非常感谢 musically-ut 的贡献 https://github.com/musically-ut/d3-circle-text )。但是,在可缩放的圆形包装上,标签会在该位置飞来飞去(在 fiddle 中,它们保持静止状态,不会在缩放时重新定位)。

是否可以让圆圈文字随圆圈一起缩放? (如果插件不可缩放,没关系。我会尝试另一种标记方法。)

这是我正在处理的代码部分:

////////////Circle text
var circleText = d3.circleText()
.radius(function(d) {
return d.r - 5;
})
.value(function(d) {
return d.key; //Get lables
})
.method('align')
.spacing('exact')
.precision(0.1)
.fontSize('100%');

var gTexts = svg.selectAll('g.label')
.data(pack.nodes) //Returns names
.enter()
.append('g')
.classed('label', true)
.attr('transform', function(d) {
return 'translate(' + d.x + ',' + d.y + ')';
});
/*.attr("x", function (d) { return d.x; })
.attr("y", function (d) { return d.y; }); */ An attempt - not working

/*.attr("cx", function (d) { return d.x; })
.attr("cy", function (d) { return d.y; }); */ An attempt - not working

//Only put on 'parent' circles
gTexts.filter(function(d) {
return !!d.children;
})
.call(circleText)
//.style('fill', 'white');

这是一个完整的 fiddle :http://jsfiddle.net/cajmcmahon/9a5xaovv/1/

感谢您的帮助。

最佳答案

我已经在 musically-ut/d3-circle-text 更新了插件

布局生成已得到简化,现在可以正确处理过渡。

更新后的 fiddle :http://jsfiddle.net/nxmkoo95/

显着变化

  • circleText 的定义提升到顶层并删除了对 .precision 的调用。
  • 使用类 .leaf-label 来识别必须手动移动的文本标签。
  • 添加了调用以更新 circleText 的半径函数并将 g.label 移动到正确的位置。
function zoom(d, i) {
var k = r / d.r / 2;
x.domain([d.x - d.r, d.x + d.r]);
y.domain([d.y - d.r, d.y + d.r]);

var t = svg.transition()
.duration(d3.event.altKey ? 7500 : 750);

t.selectAll("circle")
.attr("cx", function(d) {
return x(d.x);
})
.attr("cy", function(d) {
return y(d.y);
})
.attr("r", function(d) {
return k * d.r;
});

circleText.radius(function (d) { return k * d.r - 5.0; });
t.selectAll('g.label')
.attr('transform', function (d) {
return "translate(" + x(d.x) + ',' + y(d.y) + ')';
})
.filter(function (d) { return !!d.children; })
.call(circleText);

t.selectAll(".leaf-label")
.attr("x", function(d) {
return x(d.x);
})
.attr("y", function(d) {
return y(d.y);
})
.style("opacity", function(d) { return k * d.r > 20 ? 1 : 0; });

node = d;
d3.event.stopPropagation();
}

关于d3.js - 可缩放圆包上的“d3-circle-text”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31073452/

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