forked from d3/d3
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpie.js
More file actions
77 lines (65 loc) · 1.91 KB
/
Copy pathpie.js
File metadata and controls
77 lines (65 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import "../arrays/range";
import "../arrays/sum";
import "../math/trigonometry";
import "layout";
d3.layout.pie = function() {
var value = Number,
sort = d3_layout_pieSortByValue,
startAngle = 0,
endAngle = τ,
padAngle = 0;
function pie(data) {
var n = data.length,
values = data.map(function(d, i) { return +value.call(pie, d, i); }),
a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle),
da = (typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a,
p = Math.min(Math.abs(da) / n, +(typeof padAngle === "function" ? padAngle.apply(this, arguments) : padAngle)),
pa = p * (da < 0 ? -1 : 1),
k = (da - n * pa) / d3.sum(values),
index = d3.range(n),
arcs = [],
v;
// Optionally sort the data.
if (sort != null) index.sort(sort === d3_layout_pieSortByValue
? function(i, j) { return values[j] - values[i]; }
: function(i, j) { return sort(data[i], data[j]); });
// Compute the arcs! They are stored in the original data's order.
index.forEach(function(i) {
arcs[i] = {
data: data[i],
value: v = values[i],
startAngle: a,
endAngle: a += v * k + pa,
padAngle: p
};
});
return arcs;
}
pie.value = function(_) {
if (!arguments.length) return value;
value = _;
return pie;
};
pie.sort = function(_) {
if (!arguments.length) return sort;
sort = _;
return pie;
};
pie.startAngle = function(_) {
if (!arguments.length) return startAngle;
startAngle = _;
return pie;
};
pie.endAngle = function(_) {
if (!arguments.length) return endAngle;
endAngle = _;
return pie;
};
pie.padAngle = function(_) {
if (!arguments.length) return padAngle;
padAngle = _;
return pie;
};
return pie;
};
var d3_layout_pieSortByValue = {};