gpt4 book ai didi

javascript - 如何获得非重叠的圆形包装 d3 js 图表?

转载 作者:行者123 更新时间:2023-11-30 06:53:11 24 4
gpt4 key购买 nike

<script type = "text/javascript"> $(document).ready(function () {
var colorList = [
'rgb(196, 37, 37)', 'rgb(47, 126, 216)', 'rgb(145, 0, 0)',
'rgb(242, 143, 67)', 'rgb(26, 173, 206)', 'rgb(73, 41, 112)',
'rgb(119, 161, 229)', 'rgb(166, 201, 106)', 'rgb(237, 86, 27)',
'rgb(146, 168, 205)', 'rgb(181, 202, 146)', 'rgb(144, 137, 232)',
'rgb(164, 125, 124)', 'rgb(96, 188, 179)', 'rgb(86, 97, 54)',
'rgb(210, 189, 123)', 'rgb(120, 67, 181)', 'rgb(184,0,46)'];

var json = $ {
chartMap
}

var diameter = 500,
format = d3.format(",f");

var pack = d3.layout.pack()
.size([diameter - 4, diameter - 4])
.value(function (d) {
return d.size;
});

var svg = d3.select("#healthplanChart").append("svg")
.attr("width", diameter)
.attr("height", diameter)
.append("g")
.attr("transform", "translate(2,2)");
var root = json;
var node = svg.datum(root).selectAll(".node")
.data(pack.nodes)
.enter().append("g")
.attr("transform", function (d) {
return "translate(" + d.x + "," + d.y + ")";
});

node.append("title")
.text(function (d) {
return d.name + (d.children ? "" : ": " + format(d.size));
});

node.append("circle")
.attr("fill", function (d) {
var ind = 0;
for (var i = 0; i < root.children.length; i++) {
if (root.children[i] == d) {
ind = i;
}
};
return d.children ? "rgb(31, 119, 180)" : colorList[ind];
})
.attr("fill-opacity", function (d) {
return d.children ? "rgb(31, 119, 180)" : colorList[1];
})
.attr("r", function (d) {
return d.r;
});

node.filter(function (d) {
return !d.children;
})
.append("text")
.attr("dy", ".3em")
.style("text-anchor", "middle")
.text(function (d) {
return d.name.substring(0, d.r / 3);
});

d3.select(self.frameElement).style("height", diameter + "px");
});

JSON:

   {
"name": "HXYZ",
"children": [
{
"name": "A",
"size": 828074
},
{
"name": "B",
"size": 325658.79
},
{
"name": "C",
"size": 0
},
{
"name": "D",
"size": 6544.86
},
{
"name": "E",
"size": 2025.99
},
{
"name": "F",
"size": 0
}
]
}

最佳答案

如果确定所需大小的数值为 0,D3 圆包有时不起作用。

因此,在您的情况下,您可以执行以下任一操作:

  • 将 JSON 中的所有 "size": 0 替换为 "size": 1

  • 在您的示例中稍微更改此代码段:

来自

.value(function (d) {
return d.size;
});

.value(function (d) {
return Math.max(d.size, 1);
});

关于javascript - 如何获得非重叠的圆形包装 d3 js 图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27938902/

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