gpt4 book ai didi

javascript - D3Js 圆环图,避免标签文本叠加

转载 作者:行者123 更新时间:2023-12-03 22:29:19 25 4
gpt4 key购买 nike

在我的项目中,我有大量不同的图表,所有内容都由 D3J 处理。图表之一应该是带有标签的 donut 类型。所以基于这个tutorial我做了这个图 D3Js Donut Chart .正如您所看到的,有时(取决于数据)标签文本会覆盖。

我的问题是有什么方法可以使它像下面的示例一样,基于来自 here 的 highcharts :HighChart Donut Chart

谢谢。

最佳答案

我认为标签重叠的问题有一个解决方案,当您在以下位置调用标签时使用约束放松:Solving D3 Label Placement with Constraint Relaxing .

我快速浏览了这里的标签,它似乎有效。这是我在这里修改的代码片段:

alpha = 0.5;
spacing = 5;

function relax() {
again = false;
text.each(function (d, i) {
a = this;
da = d3.select(a);
y1 = da.attr("y");
text.each(function (d, j) {
b = this;
// a & b are the same element and don't collide.
if (a == b) return;
db = d3.select(b);
// a & b are on opposite sides of the chart and
// don't collide
if (da.attr("text-anchor") != db.attr("text-anchor")) return;
// Now let's calculate the distance between
// these elements.
y2 = db.attr("y");
deltaY = y1 - y2;

// If spacing is greater than our specified spacing,
// they don't collide.
if (Math.abs(deltaY) > spacing) return;

// If the labels collide, we'll push each
// of the two labels up and down a little bit.
again = true;
sign = deltaY > 0 ? 1 : -1;
adjust = sign * alpha;
da.attr("y",+y1 + adjust);
db.attr("y",+y2 - adjust);
});

});

if(again) {
setTimeout(relax,20)
}
}

relax();

fiddle

只需按照上面链接的教程中的下一步更新折线以跟随标签到它们的新位置。祝你好运!

关于javascript - D3Js 圆环图,避免标签文本叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28406793/

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