【发布时间】:2019-11-24 09:38:38
【问题描述】:
我正在尝试获取多级饼图/甜甜圈图。数据没有数值,应均匀分布在环中。因此,我给了他们所有相同的号码。也许有一种更优雅的方式,但在简单的数据集中它有效。可悲的是,现在我采用了一个与我的最终目标更相似的数据集,但它停止了工作。我是一个血腥的 d3 新手,如果我没有收到任何错误消息,我将非常感谢任何可能出现问题的帮助。干杯,非常感谢! (我在 html 文件中有脚本)。我以此为灵感:fiddle
编辑:要查看我的图形,我使用本地网络服务器,以便能够在本地加载内容
/* Old simple data set
var dataset = {
ring0 : [1],
ring1: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
ring2: [1,1,1],
ring3: [1,1,1,1,1,1,1,1,1,1,1,1,1,1],
ring4: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
}; */
var dataset = {
ring0:[{"Arbeitsbereich":"IT", "number": 1}],
ring1:[{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1}],
ring2:[{"Arbeitsbereich":"IT", "number": 1}, {"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1}],
ring3:[{"Arbeitsbereich":"IT", "number": 1}, {"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1}],
ring4:[{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1},{"Arbeitsbereich":"IT", "number": 1}]
};
var width = d3.select('#pie-chart').node().offsetWidth,
height = 600,
cwidth = 60;
var colorO = '#8a0101';
var colorA = '#db3131';
var colorB = '#ff4a4a';
var colorC = '#aa0000';
var colorD = '#ff0000';
var pie = d3.pie()
.value(function(d){return d.number;});
console.log(pie(dataset.ring1))
var svg = d3.select("#duration svg")
.append("g") //used to group svg elements
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
console.log(dataset);
var arc = d3.arc();
var gs = svg.selectAll("g").data(pie(dataset)).enter().append("g");
var path = gs.selectAll("path")
.data(function(d) { return pie(d); }) //.data(function(d, i)
.enter().append("path")
.attr("fill", function(d, i, j) {
switch (j) {
case 0:
return colorO(d.dataset.number);
break;
case 1:
return colorA(d.dataset.number);
break;
case 2:
return colorB(d.dataset.number);
break;
case 3:
return colorC(d.dataset.number);
break;
case 4:
return colorD(d.dataset.number);
}
})
.attr("d", function(d, i, j) {
if (j == 0) {
return arc.innerRadius(0).outerRadius(40)(d);
} else if (j == 1) {
return arc.innerRadius(40).outerRadius(cwidth * (j + 1))(d);
} else {
return arc.innerRadius(cwidth * j).outerRadius(cwidth * (j + 1))(d);
}
});
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: auto;
position: relative;
width: 960px;
}
text {
font: 10px sans-serif;
}
form {
position: absolute;
right: 10px;
top: 10px;
}
<!DOCTYPE html>
<html>
<head>
<script src="https://d3js.org/d3.v5.js"></script>
<link rel="stylesheet" href="./style.css" type="text/css" />
<meta charset="utf-8"
</head>
<body>
<div id="pie-chart">
<svg style="height:1000px;width:100%"></svg>
</div>
</body>
</html>
【问题讨论】:
标签: javascript d3.js data-visualization pie-chart donut-chart