作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在通过几个不同的网站自学 D3,以帮助使我的数据看起来更有趣(当然!)而且我觉得我已经掌握了基础知识。
但我正在努力弄清楚如何将两个圆环图放在同一页面上。除了数据和定位之外,我希望它们完全相同。
我已经包含了下面的代码,并希望得到任何帮助。
正如我所说,如何获取图表的代码将完全相同,所以希望我没有重复太多的项目(并希望删除一些我发现的不良做法)。
干杯,
乔治
Donut Chart
<!DOCTYPE html>
<meta charset="utf-8">
<head>
<title>Pie sort</title>
</head>
<style>
text {
font-family: "Helvetica Neue", Helvetica, sans-serif;
font-size: 12px;
font-weight: bold;
fill: white;
text-anchor: middle;
}
.container1 {
float: left;
}
.container2 {
float: right;
}
</style>
<body>
<script src="https://d3js.org/d3.v4.min.js"></script>
<div class="container1" id="svg1"></div>
<div class="container2" id="svg2"></div>
<script>
var mentalHealth1 = [{
City: 'Brighton',
Percentage: 1.77
}, {
City: 'Bristol',
Percentage: 1.16
}, {
City: 'Luton',
Percentage: 1.04
}, {
City: 'Milton Keynes',
Percentage: 0.93
}, {
City: 'Southampton',
Percentage: 1.37
}];
var mentalHealth2 = [{
City: 'Bradford City',
Percentage: 1.22
}, {
City: 'Leeds',
Percentage: 1.31
}, {
City: 'Liverpool',
Percentage: 1.56
}, {
City: 'Manchester',
Percentage: 1.41
}, {
City: 'Sheffield',
Percentage: 1.24
}];
draw("svg1", mentalHealth1);
draw("svg2", mentalHealth2);
function draw(selector, data) {
var color = d3.scaleOrdinal()
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56"]);
var mentalHealthPie = d3.pie()
.value(function(d) {
return d.Percentage
})
.sort(function(a, b) {
return a.City.localeCompare(b.City);
});
var arcGenerator = d3.arc()
.innerRadius(150)
.outerRadius(175);
var arcData = mentalHealthPie(data);
var svg = d3.select("#svg1")
.append("svg")
.attr("width", 1000)
.attr("height", 450)
.append("g")
.attr("transform", "translate(200,200)");
var svg = d3.select("#svg2")
.append("svg")
.attr("width", 1000)
.attr("height", 450)
.append("g")
.attr("transform", "translate(400,200)");
svg.selectAll(null)
.data(arcData)
.enter()
.append('path')
.style("fill", function(d) {
return color(d.data.Percentage);
})
.style("stroke", "white")
.attr('d', arcGenerator);
}
</script>
</body>
</html>
最佳答案
如果将所有内容都包装在一个接受两个参数的函数中,则可以删除大量重复代码,即用于创建 SVG 的选择器和数据数组,这是比较代码时唯一不同的元素。
function draw(selector, data){
//code here...
};
draw("svg1", mentalHealth1);
draw("svg2", mentalHealth2);
<div id="svg1"></div>
<div id="svg2"></div>
var mentalHealth1 = [{
City: 'Brighton',
Percentage: 1.77
}, {
City: 'Bristol',
Percentage: 1.16
}, {
City: 'Luton',
Percentage: 1.04
}, {
City: 'Milton Keynes',
Percentage: 0.93
}, {
City: 'Southampton',
Percentage: 1.37
}];
var mentalHealth2 = [{
City: 'Bradford City',
Percentage: 1.22
}, {
City: 'Leeds',
Percentage: 1.31
}, {
City: 'Liverpool',
Percentage: 1.56
}, {
City: 'Manchester',
Percentage: 1.41
}, {
City: 'Sheffield',
Percentage: 1.24
}];
var color = d3.scaleOrdinal()
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56"]);
var mentalHealthPie = d3.pie()
.value(function(d) {
return d.Percentage
})
.sort(function(a, b) {
return a.City.localeCompare(b.City);
});
var arcGenerator = d3.arc()
.innerRadius(150)
.outerRadius(200);
draw("svg1", mentalHealth1);
draw("svg2", mentalHealth2);
function draw(selector, data) {
var arcData = mentalHealthPie(data);
var svg = d3.select("#" + selector)
.append("svg")
.attr("width", 500)
.attr("height", 500)
.append("g")
.attr("transform", "translate(250,250)")
svg.selectAll(null)
.data(arcData)
.enter()
.append('path')
.style("fill", function(d) {
return color(d.data.Percentage);
})
.style("stroke", "white")
.attr('d', arcGenerator);
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<div id="svg1"></div>
<div id="svg2"></div>
关于d3.js - 同一页面上的两个圆环图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777239/
我是一名优秀的程序员,十分优秀!