The black dots show the midpoint computed by d3-shape’s arc.centroid. Note that this is not the geometric center of the arc, which may be outside the arc; this method is merely a convenience for positioning labels.
Last active
July 21, 2019 15:43
-
-
Save mbostock/9b5a2fd1ce1a146f27e4 to your computer and use it in GitHub Desktop.
Pie Centroid
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
license: gpl-3.0 | |
redirect: https://observablehq.com/@d3/pie-chart |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<canvas width="960" height="500"></canvas> | |
<script src="//d3js.org/d3.v4.0.0-alpha.4.min.js"></script> | |
<script> | |
var data = [1, 1, 2, 3, 5, 8, 13]; | |
var canvas = document.querySelector("canvas"), | |
context = canvas.getContext("2d"); | |
var width = canvas.width, | |
height = canvas.height, | |
radius = Math.min(width, height) / 2; | |
var colors = [ | |
"#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", | |
"#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf" | |
]; | |
var arc = d3.arc() | |
.outerRadius(radius - 10) | |
.innerRadius(0) | |
.context(context); | |
var dot = d3.symbol() | |
.context(context); | |
var pie = d3.pie(); | |
var arcs = pie(data); | |
context.translate(width / 2, height / 2); | |
context.globalAlpha = 0.5; | |
arcs.forEach(function(d, i) { | |
context.beginPath(); | |
arc(d); | |
context.fillStyle = colors[i]; | |
context.fill(); | |
}); | |
context.globalAlpha = 1; | |
context.beginPath(); | |
arcs.forEach(arc); | |
context.lineWidth = 1.5; | |
context.stroke(); | |
context.beginPath(); | |
arcs.forEach(function(d) { | |
var c = arc.centroid(d); | |
context.save(); | |
context.translate(c[0], c[1]); | |
dot(); | |
context.restore(); | |
}); | |
context.fillStyle = "#000"; | |
context.fill(); | |
</script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment