This adds d3.layout.pie, which can be used to compute the start and end angles
for arcs given an arbitrary array of data. In addition, d3.svg.arc now has a
`centroid` method that computes the center of the arc, useful for labeling.
Together these changes greatly simplify the donut & pie examples.

This commit also includes a `map` method for selections, which is similar to the
`filter` method. This allows you to map the data bound to the current selection.
I'm not currently using it, but it seems like a useful feature for those cases
where you want to rebind the current selection to different (but related) data.
This commit is contained in:
Michael Bostock 2011-02-24 14:13:05 -08:00
Родитель 23dc44e585
Коммит ade083dd56
13 изменённых файлов: 366 добавлений и 236 удалений

Просмотреть файл

@ -94,6 +94,7 @@ d3.layout.js: \
src/start.js \
src/layout/layout.js \
src/layout/chord.js \
src/layout/pie.js \
src/layout/stack.js \
src/end.js

32
d3.js поставляемый
Просмотреть файл

@ -1,4 +1,4 @@
(function(){d3 = {version: "1.1.0"}; // semver
(function(){d3 = {version: "1.2.0"}; // semver
if (!Date.now) Date.now = function() {
return +new Date();
};
@ -1039,6 +1039,18 @@ function d3_selection(groups) {
return d3_selection(subgroups);
};
groups.map = function(map) {
var group,
node;
for (var j = 0, m = groups.length; j < m; j++) {
group = groups[j];
for (var i = 0, n = group.length; i < n; i++) {
if (node = group[i]) node.__data__ = map.call(node, node.__data__, i);
}
}
return groups;
};
// TODO data(null) for clearing data?
groups.data = function(data, join) {
var enter = [],
@ -2261,11 +2273,11 @@ d3.svg.arc = function() {
startAngle = d3_svg_arcStartAngle,
endAngle = d3_svg_arcEndAngle;
function arc(d, i) {
var r0 = innerRadius.call(this, d, i),
r1 = outerRadius.call(this, d, i),
a0 = startAngle.call(this, d, i) + d3_svg_arcOffset,
a1 = endAngle.call(this, d, i) + d3_svg_arcOffset,
function arc() {
var r0 = innerRadius.apply(this, arguments),
r1 = outerRadius.apply(this, arguments),
a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
da = a1 - a0,
df = da < Math.PI ? "0" : "1",
c0 = Math.cos(a0),
@ -2321,6 +2333,14 @@ d3.svg.arc = function() {
return arc;
};
arc.centroid = function() {
var r = (innerRadius.apply(this, arguments)
+ outerRadius.apply(this, arguments)) / 2,
a = (startAngle.apply(this, arguments)
+ endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
return [Math.cos(a) * r, Math.sin(a) * r];
};
return arc;
};

Просмотреть файл

@ -62,18 +62,18 @@ d3.layout.chord = function() {
dj = subgroupIndex[i][j],
v = matrix[di][dj];
subgroups[di + "-" + dj] = {
"index": di,
"subindex": dj,
"startAngle": x,
"endAngle": x += v * k,
"value": v
index: di,
subindex: dj,
startAngle: x,
endAngle: x += v * k,
value: v
};
}
groups.push({
"index": di,
"startAngle": x0,
"endAngle": x,
"value": (x - x0) / k
index: di,
startAngle: x0,
endAngle: x,
value: (x - x0) / k
});
x += padding;
}
@ -85,8 +85,8 @@ d3.layout.chord = function() {
target = subgroups[j + "-" + i];
if (source.value || target.value) {
chords.push({
"source": source,
"target": target
source: source,
target: target
})
}
}
@ -150,6 +150,92 @@ d3.layout.chord = function() {
return chord;
};
d3.layout.pie = function() {
var value = Number,
sort = null,
startAngle = 0,
endAngle = 2 * Math.PI;
function pie(data, i) {
// Compute the start angle.
var a = +(typeof startAngle == "function"
? startAngle.apply(this, arguments)
: startAngle);
// Compute the angular range (end - start).
var k = (typeof endAngle == "function"
? endAngle.apply(this, arguments)
: endAngle) - startAngle;
// Optionally sort (a copy of) the data.
if (sort != null) data = data.slice().sort(sort);
// Compute the numeric values for each data element.
var values = data.map(value);
// Convert k into a scale factor from value to angle, using the sum.
k /= values.reduce(function(p, d) { return p + d; }, 0);
// Compute the arcs!
return values.map(function(d, i) {
return {
value: d,
startAngle: a,
endAngle: a += d * k
};
});
}
/**
* Specifies the value function *x*, which returns a nonnegative numeric value
* for each datum. The default value function is `Number`. The value function
* is passed two arguments: the current datum and the current index.
*/
pie.value = function(x) {
if (!arguments.length) return value;
value = x;
return pie;
};
/**
* Specifies a sort comparison operator *x*. The comparator is passed two data
* elements from the data array, a and b; it returns a negative value if a is
* less than b, a positive value if a is greater than b, and zero if a equals
* b.
*/
pie.sort = function(x) {
if (!arguments.length) return sort;
sort = x;
return pie;
};
/**
* Specifies the overall start angle of the pie chart. Defaults to 0. The
* start angle can be specified either as a constant or as a function; in the
* case of a function, it is evaluated once per array (as opposed to per
* element).
*/
pie.startAngle = function(x) {
if (!arguments.length) return startAngle;
startAngle = x;
return pie;
};
/**
* Specifies the overall end angle of the pie chart. Defaults to 2π. The
* end angle can be specified either as a constant or as a function; in the
* case of a function, it is evaluated once per array (as opposed to per
* element).
*/
pie.endAngle = function(x) {
if (!arguments.length) return endAngle;
endAngle = x;
return pie;
};
return pie;
};
// data is two-dimensional array of x,y; we populate y0
// TODO perhaps make the `x`, `y` and `y0` structure customizable
d3.layout.stack = function() {

13
d3.layout.min.js поставляемый
Просмотреть файл

@ -1,6 +1,7 @@
(function(){function z(a){return a.reduce(A,0)}function B(a){for(var h=1,d=0,c=a[0].y,i,f=a.length;h<f;++h)if((i=a[h].y)>c){d=h;c=i}return d}function A(a,h){return a+h.y}d3.layout={};d3.layout.chord=function(){function a(){var g={},m=[],s=d3.range(b),o=[],p,k,v,n,q;c=[];i=[];p=0;for(n=-1;++n<b;){k=0;for(q=-1;++q<b;)k+=f[n][q];m.push(k);o.push(d3.range(b));p+=k}j&&s.sort(function(w,t){return j(m[w],m[t])});l&&o.forEach(function(w,t){w.sort(function(C,D){return l(f[t][C],f[t][D])})});p=(2*Math.PI-e*
b)/p;k=0;for(n=-1;++n<b;){v=k;for(q=-1;++q<b;){var u=s[n],x=o[n][q],y=f[u][x];g[u+"-"+x]={index:u,subindex:x,startAngle:k,endAngle:k+=y*p,value:y}}i.push({index:u,startAngle:v,endAngle:k,value:(k-v)/p});k+=e}for(n=-1;++n<b;)for(q=n-1;++q<b;){s=g[n+"-"+q];o=g[q+"-"+n];if(s.value||o.value)c.push({source:s,target:o})}r&&h()}function h(){c.sort(function(g,m){g=Math.min(g.source.value,g.target.value);m=Math.min(m.source.value,m.target.value);return r(g,m)})}var d={},c,i,f,b,e=0,j,l,r;d.matrix=function(g){if(!arguments.length)return f;
b=(f=g)&&f.length;c=i=null;return d};d.padding=function(g){if(!arguments.length)return e;e=g;c=i=null;return d};d.sortGroups=function(g){if(!arguments.length)return j;j=g;c=i=null;return d};d.sortSubgroups=function(g){if(!arguments.length)return l;l=g;c=null;return d};d.sortChords=function(g){if(!arguments.length)return r;r=g;c&&h();return d};d.chords=function(){c||a();return c};d.groups=function(){i||a();return i};return d};d3.layout.stack=function(){function a(c){var i=c.length,f=c[0].length,b,
e,j,l=E[h](c);F[d](c,l);for(e=0;e<f;++e){b=1;for(j=c[l[0]][e].y0;b<i;++b)c[l[b]][e].y0=j+=c[l[b-1]][e].y}return c}var h="default",d="zero";a.order=function(c){if(!arguments.length)return h;h=c;return a};a.offset=function(c){if(!arguments.length)return d;d=c;return a};return a};var E={"inside-out":function(a){var h=a.length,d,c=a.map(B),i=a.map(z),f=d3.range(h).sort(function(r,g){return c[r]-c[g]}),b=0,e=0,j=[],l=[];for(a=0;a<h;a++){d=f[a];if(b<e){b+=i[d];j.push(d)}else{e+=i[d];l.push(d)}}return l.reverse().concat(j)},
reverse:function(a){return d3.range(a.length).reverse()},"default":function(a){return d3.range(a.length)}},F={silhouette:function(a,h){var d=a.length,c=a[0].length,i=[],f=0,b,e,j;for(e=0;e<c;++e){for(j=b=0;b<d;b++)j+=a[b][e].y;if(j>f)f=j;i.push(j)}e=0;for(b=h[0];e<c;++e)a[b][e].y0=(f-i[e])/2},wiggle:function(a,h){var d=a.length,c=a[0],i=c.length,f,b,e,j,l,r=h[0],g,m,s,o,p,k;a[r][0].y0=p=k=0;for(b=1;b<i;++b){for(g=f=0;f<d;++f)g+=a[f][b].y;m=f=0;for(o=c[b].x-c[b-1].x;f<d;++f){e=0;j=h[f];for(s=(a[j][b].y-
a[j][b-1].y)/(2*o);e<f;++e)s+=(a[l=h[e]][b].y-a[l][b-1].y)/o;m+=s*a[j][b].y}a[r][b].y0=p-=g?m/g*o:0;if(p<k)k=p}for(b=0;b<i;++b)a[r][b].y0-=k},zero:function(a,h){for(var d=0,c=a[0].length,i=h[0];d<c;++d)a[i][d].y0=0}}})();
(function(){function z(a){return a.reduce(A,0)}function B(a){for(var h=1,d=0,c=a[0].y,g,e=a.length;h<e;++h)if((g=a[h].y)>c){d=h;c=g}return d}function A(a,h){return a+h.y}d3.layout={};d3.layout.chord=function(){function a(){var i={},m=[],s=d3.range(b),p=[],q,l,v,n,r;c=[];g=[];q=0;for(n=-1;++n<b;){l=0;for(r=-1;++r<b;)l+=e[n][r];m.push(l);p.push(d3.range(b));q+=l}j&&s.sort(function(w,t){return j(m[w],m[t])});k&&p.forEach(function(w,t){w.sort(function(C,D){return k(e[t][C],e[t][D])})});q=(2*Math.PI-f*
b)/q;l=0;for(n=-1;++n<b;){v=l;for(r=-1;++r<b;){var u=s[n],x=p[n][r],y=e[u][x];i[u+"-"+x]={index:u,subindex:x,startAngle:l,endAngle:l+=y*q,value:y}}g.push({index:u,startAngle:v,endAngle:l,value:(l-v)/q});l+=f}for(n=-1;++n<b;)for(r=n-1;++r<b;){s=i[n+"-"+r];p=i[r+"-"+n];if(s.value||p.value)c.push({source:s,target:p})}o&&h()}function h(){c.sort(function(i,m){i=Math.min(i.source.value,i.target.value);m=Math.min(m.source.value,m.target.value);return o(i,m)})}var d={},c,g,e,b,f=0,j,k,o;d.matrix=function(i){if(!arguments.length)return e;
b=(e=i)&&e.length;c=g=null;return d};d.padding=function(i){if(!arguments.length)return f;f=i;c=g=null;return d};d.sortGroups=function(i){if(!arguments.length)return j;j=i;c=g=null;return d};d.sortSubgroups=function(i){if(!arguments.length)return k;k=i;c=null;return d};d.sortChords=function(i){if(!arguments.length)return o;o=i;c&&h();return d};d.chords=function(){c||a();return c};d.groups=function(){g||a();return g};return d};d3.layout.pie=function(){function a(e){var b=+(typeof c=="function"?c.apply(this,
arguments):c),f=(typeof g=="function"?g.apply(this,arguments):g)-c;if(d!=null)e=e.slice().sort(d);var j=e.map(h);f/=j.reduce(function(k,o){return k+o},0);return j.map(function(k){return{value:k,startAngle:b,endAngle:b+=k*f}})}var h=Number,d=null,c=0,g=2*Math.PI;a.value=function(e){if(!arguments.length)return h;h=e;return a};a.sort=function(e){if(!arguments.length)return d;d=e;return a};a.startAngle=function(e){if(!arguments.length)return c;c=e;return a};a.endAngle=function(e){if(!arguments.length)return g;
g=e;return a};return a};d3.layout.stack=function(){function a(c){var g=c.length,e=c[0].length,b,f,j,k=E[h](c);F[d](c,k);for(f=0;f<e;++f){b=1;for(j=c[k[0]][f].y0;b<g;++b)c[k[b]][f].y0=j+=c[k[b-1]][f].y}return c}var h="default",d="zero";a.order=function(c){if(!arguments.length)return h;h=c;return a};a.offset=function(c){if(!arguments.length)return d;d=c;return a};return a};var E={"inside-out":function(a){var h=a.length,d,c=a.map(B),g=a.map(z),e=d3.range(h).sort(function(o,i){return c[o]-c[i]}),b=0,
f=0,j=[],k=[];for(a=0;a<h;a++){d=e[a];if(b<f){b+=g[d];j.push(d)}else{f+=g[d];k.push(d)}}return k.reverse().concat(j)},reverse:function(a){return d3.range(a.length).reverse()},"default":function(a){return d3.range(a.length)}},F={silhouette:function(a,h){var d=a.length,c=a[0].length,g=[],e=0,b,f,j;for(f=0;f<c;++f){for(j=b=0;b<d;b++)j+=a[b][f].y;if(j>e)e=j;g.push(j)}f=0;for(b=h[0];f<c;++f)a[b][f].y0=(e-g[f])/2},wiggle:function(a,h){var d=a.length,c=a[0],g=c.length,e,b,f,j,k,o=h[0],i,m,s,p,q,l;a[o][0].y0=
q=l=0;for(b=1;b<g;++b){for(i=e=0;e<d;++e)i+=a[e][b].y;m=e=0;for(p=c[b].x-c[b-1].x;e<d;++e){f=0;j=h[e];for(s=(a[j][b].y-a[j][b-1].y)/(2*p);f<e;++f)s+=(a[k=h[f]][b].y-a[k][b-1].y)/p;m+=s*a[j][b].y}a[o][b].y0=q-=i?m/i*p:0;if(q<l)l=q}for(b=0;b<g;++b)a[o][b].y0-=l},zero:function(a,h){for(var d=0,c=a[0].length,g=h[0];d<c;++d)a[g][d].y0=0}}})();

135
d3.min.js поставляемый
Просмотреть файл

@ -1,67 +1,68 @@
(function(){function ua(a){for(var b=-1,d=a.length,f=[];++b<d;)f.push(a[b]);return f}function v(a){return typeof a=="function"?a:function(){return a}}function C(a,b){return function(){var d=b.apply(a,arguments);return arguments.length?a:d}}function va(a){return a==null}function ca(a){return a.replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g," ")}function da(a){arguments[0]=this;a.apply(this,arguments);return this}function wa(){var a={},b=[];a.add=function(d){for(var f=0;f<b.length;f++)if(b[f].listener==
d)return a;b.push({listener:d,on:true});return a};a.remove=function(d){for(var f=0;f<b.length;f++){var e=b[f];if(e.listener==d){e.on=false;b=b.slice(0,f).concat(b.slice(f+1));break}}return a};a.dispatch=function(){for(var d=b,f=0,e=d.length;f<e;f++){var c=d[f];c.on&&c.listener.apply(this,arguments)}};return a}function ea(a){return function(b){return 1-a(1-b)}}function fa(a){return function(b){return 0.5*(b<0.5?a(2*b):2-a(2-2*b))}}function xa(a){return a}function R(a){return function(b){return Math.pow(b,
a)}}function ya(a){return 1-Math.cos(a*Math.PI/2)}function za(a){return a?Math.pow(2,10*(a-1))-0.0010:0}function Aa(a){return 1-Math.sqrt(1-a*a)}function Ba(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}function I(a,b,d){return{r:a,g:b,b:d,toString:Ca}}function Ca(){return"#"+S(this.r)+S(this.g)+S(this.b)}function S(a){return a<16?"0"+a.toString(16):a.toString(16)}function T(a,b,d){var f=0,e=0,c=0,i,h;
if(i=/([a-z]+)\((.*)\)/i.exec(a)){h=i[2].split(",");switch(i[1]){case "hsl":return d(parseFloat(h[0]),parseFloat(h[1])/100,parseFloat(h[2])/100);case "rgb":return b(U(h[0]),U(h[1]),U(h[2]))}}if(d=G[a])return b(d.r,d.g,d.b);if(a!=null&&a.charAt(0)=="#"){if(a.length==4){f=a.charAt(1);f+=f;e=a.charAt(2);e+=e;c=a.charAt(3);c+=c}else if(a.length==7){f=a.substring(1,3);e=a.substring(3,5);c=a.substring(5,7)}f=parseInt(f,16);e=parseInt(e,16);c=parseInt(c,16)}return b(f,e,c)}function Da(a,b,d){var f=Math.min(a/=
255,b/=255,d/=255),e=Math.max(a,b,d),c=e-f,i=(e+f)/2;if(c){f=i<0.5?c/(e+f):c/(2-e-f);a=a==e?(b-d)/c+(b<d?6:0):b==e?(d-a)/c+2:(a-b)/c+4;a*=60}else f=a=0;return V(a,f,i)}function U(a){var b=parseFloat(a);return a.charAt(a.length-1)=="%"?Math.round(b*2.55):b}function V(a,b,d){return{h:a,s:b,l:d,toString:Ea}}function Ea(){return"hsl("+this.h+","+this.s*100+"%,"+this.l*100+"%)"}function ga(a,b,d){function f(i){if(i>360)i-=360;else if(i<0)i+=360;if(i<60)return e+(c-e)*i/60;if(i<180)return c;if(i<240)return e+
(c-e)*(240-i)/60;return e}var e,c;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;d=d<0?0:d>1?1:d;c=d<=0.5?d*(1+b):d+b-d*b;e=2*d-c;return I(Math.round(f(a+120)*255),Math.round(f(a)*255),Math.round(f(a-120)*255))}function y(a){function b(e){for(var c=[],i,h,g,k,j=0,o=a.length;j<o;j++){g=a[j];c.push(i=[]);i.parentNode=g.parentNode;i.parentData=g.parentData;for(var p=0,m=g.length;p<m;p++)if(k=g[p]){i.push(h=e(k));if(h&&"__data__"in k)h.__data__=k.__data__}else i.push(null)}return y(c)}function d(e){for(var c=[],
i,h,g,k=0,j=a.length;k<j;k++){h=a[k];for(var o=0,p=h.length;o<p;o++)if(g=h[o]){c.push(i=e(g));i.parentNode=g;i.parentData=g.__data__}}return y(c)}function f(e){for(var c=0,i=a.length;c<i;c++)for(var h=a[c],g=0,k=h.length;g<k;g++){var j=h[g];if(j)return e.call(j,j.__data__,g)}return null}a.select=function(e){return b(function(c){return D(e,c)})};a.selectAll=function(e){return d(function(c){return ha(e,c)})};a.filter=function(e){for(var c=[],i,h,g,k=0,j=a.length;k<j;k++){h=a[k];c.push(i=[]);i.parentNode=
h.parentNode;i.parentData=h.parentData;for(var o=0,p=h.length;o<p;o++)if((g=h[o])&&e.call(g,g.__data__,o))i.push(g)}return y(c)};a.data=function(e,c){function i(m,n){var l=0,q=m.length,r=n.length,t=Math.min(q,r),u=Math.max(q,r),s=[],z=[],w=[],x,A;if(c){t={};u=[];var E;A=n.length;for(l=0;l<q;l++){E=c.call(x=m[l],x.__data__,l);if(E in t)w[A++]=m[l];else{t[E]=x;u.push(E)}}for(l=0;l<r;l++){if(x=t[E=c.call(n,A=n[l],l)]){x.__data__=A;s[l]=x;z[l]=w[l]=null}else{z[l]={__data__:A};s[l]=w[l]=null}delete t[E]}for(l=
0;l<q;l++)if(u[l]in t)w[l]=m[l]}else{for(;l<t;l++){x=m[l];A=n[l];if(x){x.__data__=A;s[l]=x;z[l]=w[l]=null}else{z[l]={__data__:A};s[l]=w[l]=null}}for(;l<r;l++){z[l]={__data__:n[l]};s[l]=w[l]=null}for(;l<u;l++){w[l]=m[l];z[l]=s[l]=null}}z.parentNode=s.parentNode=w.parentNode=m.parentNode;z.parentData=s.parentData=w.parentData=m.parentData;h.push(z);g.push(s);k.push(w)}var h=[],g=[],k=[],j=-1,o=a.length,p;if(typeof e=="function")for(;++j<o;)i(p=a[j],e.call(p,p.parentData,j));else for(;++j<o;)i(p=a[j],
e);j=y(g);j.enter=function(){return Fa(h)};j.exit=function(){return y(k)};return j};a.each=function(e){for(var c=0,i=a.length;c<i;c++)for(var h=a[c],g=0,k=h.length;g<k;g++){var j=h[g];j&&e.call(j,j.__data__,g)}return a};a.empty=function(){return!f(function(){return true})};a.node=function(){return f(function(){return this})};a.attr=function(e,c){function i(){this.removeAttribute(e)}function h(){this.removeAttributeNS(e.space,e.local)}function g(){this.setAttribute(e,c)}function k(){this.setAttributeNS(e.space,
e.local,c)}function j(){var p=c.apply(this,arguments);p==null?this.removeAttribute(e):this.setAttribute(e,p)}function o(){var p=c.apply(this,arguments);p==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,p)}e=d3.ns.qualify(e);if(arguments.length<2)return f(e.local?function(){return this.getAttributeNS(e.space,e.local)}:function(){return this.getAttribute(e)});return a.each(c==null?e.local?h:i:typeof c=="function"?e.local?o:j:e.local?k:g)};a.classed=function(e,c){function i(){var j=
this.className;k.lastIndex=0;if(!k.test(j))this.className=ca(j+" "+e)}function h(){var j=ca(this.className.replace(k," "));this.className=j.length?j:null}function g(){(c.apply(this,arguments)?i:h).call(this)}var k=RegExp("(^|\\s+)"+d3.requote(e)+"(\\s+|$)","g");if(arguments.length<2)return f(function(){k.lastIndex=0;return k.test(this.className)});return a.each(typeof c=="function"?g:c?i:h)};a.style=function(e,c,i){function h(){this.style.removeProperty(e)}function g(){this.style.setProperty(e,c,
i)}function k(){var j=c.apply(this,arguments);j==null?this.style.removeProperty(e):this.style.setProperty(e,j,i)}if(arguments.length<3)i=null;if(arguments.length<2)return f(function(){return window.getComputedStyle(this,null).getPropertyValue(e)});return a.each(c==null?h:typeof c=="function"?k:g)};a.property=function(e,c){function i(){delete this[e]}function h(){this[e]=c}function g(){var k=c.apply(this,arguments);if(k==null)delete this[e];else this[e]=k}e=d3.ns.qualify(e);if(arguments.length<2)return f(function(){return this[e]});
return a.each(c==null?i:typeof c=="function"?g:h)};a.text=function(e){function c(){this.appendChild(document.createTextNode(e))}function i(){var h=e.apply(this,arguments);h!=null&&this.appendChild(document.createTextNode(h))}if(arguments.length<1)return f(function(){return this.textContent});a.each(function(){for(;this.lastChild;)this.removeChild(this.lastChild)});return e==null?a:a.each(typeof e=="function"?i:c)};a.html=function(e){function c(){this.innerHTML=e}function i(){this.innerHTML=e.apply(this,
arguments)}if(arguments.length<1)return f(function(){return this.innerHTML});return a.each(typeof e=="function"?i:c)};a.append=function(e){function c(h){return h.appendChild(document.createElement(e))}function i(h){return h.appendChild(document.createElementNS(e.space,e.local))}e=d3.ns.qualify(e);return b(e.local?i:c)};a.insert=function(e,c){function i(g){return g.insertBefore(document.createElement(e),D(c,g))}function h(g){return g.insertBefore(document.createElementNS(e.space,e.local),D(c,g))}e=
d3.ns.qualify(e);return b(e.local?h:i)};a.remove=function(){return b(function(e){var c=e.parentNode;c.removeChild(e);return c})};a.sort=function(e){e=Ga.apply(this,arguments);for(var c=0,i=a.length;c<i;c++){var h=a[c];h.sort(e);for(var g=1,k=h.length,j=h[0];g<k;g++){var o=h[g];if(o){j&&j.parentNode.insertBefore(o,j.nextSibling);j=o}}}return a};a.on=function(e,c){var i=e.indexOf("."),h=i==-1?e:e.substring(0,i),g="__on"+e;return a.each(function(k,j){function o(p){var m=d3.event;d3.event=p;try{c.call(this,
k,j)}finally{d3.event=m}}this[g]&&this.removeEventListener(h,this[g],false);if(c)this.addEventListener(h,this[g]=o,false)})};a.transition=function(){return W(a)};a.call=da;return a}function Fa(a){function b(d){for(var f=[],e,c,i,h,g=0,k=a.length;g<k;g++){i=a[g];f.push(e=[]);e.parentNode=i.parentNode;e.parentData=i.parentData;for(var j=0,o=i.length;j<o;j++)if(h=i[j]){e.push(c=d(i.parentNode));c.__data__=h.__data__}else e.push(null)}return y(f)}a.append=function(d){function f(c){return c.appendChild(document.createElement(d))}
function e(c){return c.appendChild(document.createElementNS(d.space,d.local))}d=d3.ns.qualify(d);return b(d.local?e:f)};a.insert=function(d,f){function e(i){return i.insertBefore(document.createElement(d),D(f,i))}function c(i){return i.insertBefore(document.createElementNS(d.space,d.local),D(f,i))}d=d3.ns.qualify(d);return b(d.local?c:e)};return a}function Ga(a){if(!arguments.length)a=d3.ascending;return function(b,d){return a(b&&b.__data__,d&&d.__data__)}}function W(a){function b(m){var n=true,l=
-1;a.each(function(){if(g[++l]!=2){var q=(m-k[l])/j[l],r=this.__transition__,t,u,s=c[l];if(q<1){n=false;if(q<0)return}else q=1;if(g[l]){if(!r||r.active!=f){g[l]=2;return}}else if(!r||r.active>f){g[l]=2;return}else{g[l]=1;h.start.dispatch.apply(this,arguments);s=c[l]={};r.active=f;for(u in e)s[u]=e[u].apply(this,arguments)}t=p(q);for(u in e)s[u].call(this,t);if(q==1){g[l]=2;if(r.active==f){q=r.owner;if(q==f){delete this.__transition__;i&&this.parentNode.removeChild(this)}X=f;h.end.dispatch.apply(this,
arguments);X=0;r.owner=q}}}});return n}var d={},f=X||++Ha,e={},c=[],i=false,h=d3.dispatch("start","end"),g=[],k=[],j=[],o,p=d3.ease("cubic-in-out");a.each(function(){(this.__transition__||(this.__transition__={})).owner=f});d.delay=function(m){var n=Infinity,l=-1;if(typeof m=="function")a.each(function(){var q=k[++l]=+m.apply(this,arguments);if(q<n)n=q});else{n=+m;a.each(function(){k[++l]=n})}Ia(b,n);return d};d.duration=function(m){var n=-1;if(typeof m=="function"){o=0;a.each(function(){var l=j[++n]=
+m.apply(this,arguments);if(l>o)o=l})}else{o=+m;a.each(function(){j[++n]=o})}return d};d.ease=function(m){p=typeof m=="string"?d3.ease(m):m;return d};d.attrTween=function(m,n){function l(r,t){var u=n.call(this,r,t,this.getAttribute(m));return function(s){this.setAttribute(m,u(s))}}function q(r,t){var u=n.call(this,r,t,this.getAttributeNS(m.space,m.local));return function(s){this.setAttributeNS(m.space,m.local,u(s))}}e["attr."+m]=m.local?q:l;return d};d.attr=function(m,n){return d.attrTween(m,ia(n))};
d.styleTween=function(m,n,l){if(arguments.length<3)l=null;e["style."+m]=function(q,r){var t=n.call(this,q,r,window.getComputedStyle(this,null).getPropertyValue(m));return function(u){this.style.setProperty(m,t(u),l)}};return d};d.style=function(m,n,l){if(arguments.length<3)l=null;return d.styleTween(m,ia(n),l)};d.select=function(m){var n;m=W(a.select(m)).ease(p);n=-1;m.delay(function(){return k[++n]});n=-1;m.duration(function(){return j[++n]});return m};d.selectAll=function(m){var n;m=W(a.selectAll(m)).ease(p);
n=-1;m.delay(function(l,q){return k[q?n:++n]});n=-1;m.duration(function(l,q){return j[q?n:++n]});return m};d.remove=function(){i=true;return d};d.each=function(m,n){h[m].add(n);return d};d.call=da;return d.delay(0).duration(250)}function ia(a){return typeof a=="function"?function(b,d,f){return d3.interpolate(f,String(a.call(this,b,d)))}:(a=String(a),function(b,d,f){return d3.interpolate(f,a)})}function Ia(a,b){var d=Date.now(),f=false,e=d+b,c=F;if(isFinite(b)){for(;c;){if(c.callback==a){c.then=d;
c.delay=b;f=true}else{var i=c.then+c.delay;if(i<e)e=i}c=c.next}f||(F={callback:a,then:d,delay:b,next:F});if(!J){clearTimeout(Y);Y=setTimeout(Ja,Math.max(24,e-d))}}}function Ja(){J=setInterval(Ka,24);Y=0}function Ka(){for(var a,b=Date.now(),d=F;d;){a=b-d.then;if(a>d.delay)d.flush=d.callback(a);d=d.next}a=null;for(b=F;b;)b=b.flush?a?a.next=b.next:F=b.next:(a=b).next;a||(J=clearInterval(J))}function La(a){return a.innerRadius}function Ma(a){return a.outerRadius}function ja(a){return a.startAngle}function ka(a){return a.endAngle}
function Z(a,b,d,f){var e=[],c=-1,i=b.length,h=typeof d=="function",g=typeof f=="function",k;if(h&&g)for(;++c<i;)e.push([d.call(a,k=b[c],c),f.call(a,k,c)]);else if(h)for(;++c<i;)e.push([d.call(a,b[c],c),f]);else if(g)for(;++c<i;)e.push([d,f.call(a,b[c],c)]);else for(;++c<i;)e.push([d,f]);return e}function la(a){return a[0]}function ma(a){return a[1]}function H(a){var b=[],d=0,f=a.length,e=a[0];for(b.push(e[0],",",e[1]);++d<f;)b.push("L",(e=a[d])[0],",",e[1]);return b.join("")}function na(a,b){if(b.length<
1||a.length!=b.length&&a.length!=b.length+2)return H(a);var d=a.length!=b.length,f="",e=a[0],c=a[1],i=b[0],h=i,g=1;if(d){f+="Q"+(c[0]-i[0]*2/3)+","+(c[1]-i[1]*2/3)+","+c[0]+","+c[1];e=a[1];g=2}if(b.length>1){h=b[1];c=a[g];g++;f+="C"+(e[0]+i[0])+","+(e[1]+i[1])+","+(c[0]-h[0])+","+(c[1]-h[1])+","+c[0]+","+c[1];for(e=2;e<b.length;e++,g++){c=a[g];h=b[e];f+="S"+(c[0]-h[0])+","+(c[1]-h[1])+","+c[0]+","+c[1]}}if(d){d=a[g];f+="Q"+(c[0]+h[0]*2/3)+","+(c[1]+h[1]*2/3)+","+d[0]+","+d[1]}return f}function oa(a,
b){for(var d=[],f=(1-b)/2,e=a[0],c=a[1],i=a[2],h=2,g=a.length;++h<g;){d.push([f*(i[0]-e[0]),f*(i[1]-e[1])]);e=c;c=i;i=a[h]}d.push([f*(i[0]-e[0]),f*(i[1]-e[1])]);return d}function B(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function K(a,b,d){a.push("C",B(pa,b),",",B(pa,d),",",B(qa,b),",",B(qa,d),",",B(L,b),",",B(L,d))}function Na(){return 0}function Oa(a){return a.source}function Pa(a){return a.target}function Qa(a){return a.radius}function Ra(){return 64}function Sa(){return"circle"}d3=
{version:"1.1.0"};if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(a){function b(){}b.prototype=a;return new b};var M=function(a){return Array.prototype.slice.call(a)};try{M(document.documentElement.childNodes)}catch(eb){M=ua}d3.ascending=function(a,b){return a<b?-1:a>b?1:0};d3.descending=function(a,b){return b<a?-1:b>a?1:0};d3.min=function(a,b){var d=0,f=a.length,e=a[0],c;if(arguments.length==1)for(;++d<f;){if(e>(c=a[d]))e=c}else for(e=b(a[0]);++d<f;)if(e>
(c=b(a[d])))e=c;return e};d3.max=function(a,b){var d=0,f=a.length,e=a[0],c;if(arguments.length==1)for(;++d<f;){if(e<(c=a[d]))e=c}else for(e=b(e);++d<f;)if(e<(c=b(a[d])))e=c;return e};d3.nest=function(){function a(c,i){if(c>=d.length)return e?e.call(b,i):f?i.sort(f):i;for(var h=-1,g=i.length,k=d[c],j,o=[],p,m={};++h<g;)if((j=k(p=i[h]))in m)m[j].push(p);else{m[j]=[p];o.push(j)}c++;h=-1;for(g=o.length;++h<g;){p=m[j=o[h]];m[j]=a(c,p)}return m}var b={},d=[],f,e;b.map=function(c){return a(0,c)};b.key=function(c){d.push(c);
return b};b.sortKeys=function(){return b};b.sortValues=function(c){f=c;return b};b.rollup=function(c){e=c;return b};return b};d3.keys=function(a){var b=[],d;for(d in a)b.push(d);return b};d3.values=function(a){var b=[],d;for(d in a)b.push(a[d]);return b};d3.entries=function(a){var b=[],d;for(d in a)b.push({key:d,value:a[d]});return b};d3.merge=function(a){return Array.prototype.concat.apply([],a)};d3.split=function(a,b){var d=[],f=[],e,c=-1,i=a.length;if(arguments.length<2)b=va;for(;++c<i;)if(b.call(f,
e=a[c],c))f=[];else{f.length||d.push(f);f.push(e)}return d};d3.range=function(a,b,d){if(arguments.length==1){b=a;a=0}if(d==null)d=1;if((b-a)/d==Infinity)throw Error("infinite range");var f=[],e=-1,c;if(d<0)for(;(c=a+d*++e)>b;)f.push(c);else for(;(c=a+d*++e)<b;)f.push(c);return f};d3.requote=function(a){return a.replace(Ta,"\\$&")};var Ta=/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;d3.xhr=function(a,b,d){var f=new XMLHttpRequest;if(arguments.length<3)d=b;else b&&f.overrideMimeType(b);f.open("GET",a,true);f.onreadystatechange=
function(){if(f.readyState==4)d(f.status<300?f:null)};f.send(null)};d3.text=function(a,b,d){if(arguments.length<3){d=b;b=null}d3.xhr(a,b,function(f){d(f&&f.responseText)})};d3.json=function(a,b){d3.text(a,"application/json",function(d){b(d?JSON.parse(d):null)})};d3.html=function(a,b){d3.text(a,"text/html",function(d){if(d!=null){var f=document.createRange();f.selectNode(document.body);d=f.createContextualFragment(d)}b(d)})};d3.xml=function(a,b,d){if(arguments.length<3){d=b;b=null}d3.xhr(a,b,function(f){d(f&&
f.responseXML)})};d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}};d3.dispatch=function(){for(var a={},b,d=0,f=arguments.length;d<f;d++){b=arguments[d];a[b]=wa(b)}return a};d3.format=function(a){a=Ua.exec(a);var b=a[1]||" ",d=ra[a[3]]||
ra["-"],f=a[5],e=+a[6],c=a[7],i=a[8],h=a[9];if(i)i=i.substring(1);if(f)b="0";if(h=="d")i="0";return function(g){g=+g;var k=g<0&&(g=-g);if(h=="d"&&g%1)return"";g=i?g.toFixed(i):""+g;if(c){for(var j=g.lastIndexOf("."),o=j>=0?g.substring(j):(j=g.length,""),p=[];j>0;)p.push(g.substring(j-=3,j+3));g=p.reverse().join(",")+o}k=(g=d(k,g)).length;if(k<e)g=Array(e-k+1).join(b)+g;return g}};var Ua=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,ra={"+":function(a,b){return(a?"":
"+")+b}," ":function(a,b){return(a?"":" ")+b},"-":function(a,b){return a?""+b:b}},Va=R(2),Wa=R(3),Xa={linear:function(){return xa},poly:R,quad:function(){return Va},cubic:function(){return Wa},sin:function(){return ya},exp:function(){return za},circle:function(){return Aa},elastic:function(a,b){var d;if(arguments.length<2)b=0.45;if(arguments.length<1){a=1;d=b/4}else d=b/(2*Math.PI)*Math.asin(1/a);return function(f){return 1+a*Math.pow(2,10*-f)*Math.sin((f-d)*2*Math.PI/b)}},back:function(a){a||(a=
1.70158);return function(b){return b*b*((a+1)*b-a)}},bounce:function(){return Ba}},Ya={"in":function(a){return a},out:ea,"in-out":fa,"out-in":function(a){return fa(ea(a))}};d3.ease=function(a){var b=a.indexOf("-"),d=b>=0?a.substring(0,b):a;b=b>=0?a.substring(b+1):"in";return Ya[b](Xa[d].apply(null,Array.prototype.slice.call(arguments,1)))};d3.event=null;d3.interpolate=function(a,b){if(typeof b=="number")return d3.interpolateNumber(+a,b);if(typeof b=="string")return b in G||/^(#|rgb\(|hsl\()/.test(b)?
d3.interpolateRgb(String(a),b):d3.interpolateString(String(a),b);if(b instanceof Array)return d3.interpolateArray(a,b);return d3.interpolateObject(a,b)};d3.interpolateNumber=function(a,b){b-=a;return function(d){return a+b*d}};d3.interpolateRound=function(a,b){b-=a;return function(d){return Math.round(a+b*d)}};d3.interpolateString=function(a,b){var d,f,e=0,c=[],i=[],h,g;for(f=0;d=$.exec(b);++f){d.index&&c.push(b.substring(e,d.index));i.push({i:c.length,x:d[0]});c.push(null);e=$.lastIndex}e<b.length&&
c.push(b.substring(e));f=0;for(h=i.length;(d=$.exec(a))&&f<h;++f){g=i[f];if(g.x==d[0]){if(g.i)if(c[g.i+1]==null){c[g.i-1]+=g.x;c.splice(g.i,1);for(d=f+1;d<h;++d)i[d].i--}else{c[g.i-1]+=g.x+c[g.i+1];c.splice(g.i,2);for(d=f+1;d<h;++d)i[d].i-=2}else if(c[g.i+1]==null)c[g.i]=g.x;else{c[g.i]=g.x+c[g.i+1];c.splice(g.i+1,1);for(d=f+1;d<h;++d)i[d].i--}i.splice(f,1);h--;f--}else g.x=d3.interpolateNumber(parseFloat(d[0]),parseFloat(g.x))}for(;f<h;){g=i.pop();if(c[g.i+1]==null)c[g.i]=g.x;else{c[g.i]=g.x+c[g.i+
1];c.splice(g.i+1,1)}h--}if(c.length==1)return c[0]==null?i[0].x:function(){return b};return function(k){for(f=0;f<h;++f)c[(g=i[f]).i]=g.x(k);return c.join("")}};d3.interpolateRgb=function(a,b){a=d3.rgb(a);b=d3.rgb(b);var d=a.r,f=a.g,e=a.b,c=b.r-d,i=b.g-f,h=b.b-e;return function(g){return"rgb("+Math.round(d+c*g)+","+Math.round(f+i*g)+","+Math.round(e+h*g)+")"}};d3.interpolateArray=function(a,b){var d=[],f=[],e=a.length,c=b.length,i=Math.min(a.length,b.length),h;for(h=0;h<i;++h)d.push(d3.interpolate(a[h],
b[h]));for(;h<e;++h)f[h]=a[h];for(;h<c;++h)f[h]=b[h];return function(g){for(h=0;h<i;++h)f[h]=d[h](g);return f}};d3.interpolateObject=function(a,b){var d={},f={},e;for(e in a)if(e in b)d[e]=(e in Za||/\bcolor\b/.test(e)?d3.interpolateRgb:d3.interpolate)(a[e],b[e]);else f[e]=a[e];for(e in b)e in a||(f[e]=b[e]);return function(c){for(e in d)f[e]=d[e](c);return f}};var $=/[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,Za={background:1,fill:1,stroke:1};d3.rgb=function(a,b,d){return arguments.length==
1?T(""+a,I,ga):I(~~a,~~b,~~d)};var G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",
darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",
gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",
lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",
mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",
seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},aa;for(aa in G)G[aa]=T(G[aa],I,ga);d3.hsl=function(a,b,d){return arguments.length==1?T(""+a,Da,V):V(+a,
+b,+d)};var D=function(a,b){return b.querySelector(a)},ha=function(a,b){return M(b.querySelectorAll(a))};if(typeof Sizzle=="function"){D=function(a,b){return Sizzle(a,b)[0]};ha=Sizzle}var N=y([[document]]);N[0].parentNode=document.documentElement;d3.select=function(a){return typeof a=="string"?N.select(a):y([[a]])};d3.selectAll=function(a){return typeof a=="string"?N.selectAll(a):y([M(a)])};d3.transition=N.transition;var Ha=0,X=0,F=null,Y=0,J;d3.scale={};d3.scale.linear=function(){function a(j){return k((j-
d)*i)}function b(j){var o=Math.min(d,f),p=Math.max(d,f),m=p-o,n=Math.pow(10,Math.floor(Math.log(m/j)/Math.LN10));j=j/(m/n);if(j<=0.15)n*=10;else if(j<=0.35)n*=5;else if(j<=0.75)n*=2;return{start:Math.ceil(o/n)*n,stop:Math.floor(p/n)*n+n*0.5,step:n}}var d=0,f=1,e=0,c=1,i=1/(f-d),h=(f-d)/(c-e),g=d3.interpolate,k=g(e,c);a.invert=function(j){return(j-e)*h+d};a.domain=function(j){if(!arguments.length)return[d,f];d=j[0];f=j[1];i=1/(f-d);h=(f-d)/(c-e);return a};a.range=function(j){if(!arguments.length)return[e,
c];e=j[0];c=j[1];h=(f-d)/(c-e);k=g(e,c);return a};a.rangeRound=function(j){return a.range(j).interpolate(d3.interpolateRound)};a.interpolate=function(j){if(!arguments.length)return g;k=(g=j)(e,c);return a};a.ticks=function(j){j=b(j);return d3.range(j.start,j.stop,j.step)};a.tickFormat=function(j){j=Math.max(0,-Math.floor(Math.log(b(j).step)/Math.LN10+0.01));return d3.format(",."+j+"f")};return a};d3.scale.log=function(){function a(c){return(e?-Math.log(-c):Math.log(c))/Math.LN10}function b(c){return e?
-Math.pow(10,-c):Math.pow(10,c)}function d(c){return f(a(c))}var f=d3.scale.linear(),e=false;d.invert=function(c){return b(f.invert(c))};d.domain=function(c){if(!arguments.length)return f.domain().map(b);e=(c[0]||c[1])<0;f.domain(c.map(a));return d};d.range=C(d,f.range);d.rangeRound=C(d,f.rangeRound);d.interpolate=C(d,f.interpolate);d.ticks=function(){var c=f.domain(),i=[];if(c.every(isFinite)){var h=Math.floor(c[0]),g=Math.ceil(c[1]),k=b(c[0]);c=b(c[1]);if(e)for(i.push(b(h));h++<g;)for(var j=9;j>
0;j--)i.push(b(h)*j);else{for(;h<g;h++)for(j=1;j<10;j++)i.push(b(h)*j);i.push(b(h))}for(h=0;i[h]<k;h++);for(g=i.length;i[g-1]>c;g--);i=i.slice(h,g)}return i};d.tickFormat=function(){return function(c){return c.toPrecision(1)}};return d};d3.scale.pow=function(){function a(g){return h?-Math.pow(-g,c):Math.pow(g,c)}function b(g){return h?-Math.pow(-g,i):Math.pow(g,i)}function d(g){return f(a(g))}var f=d3.scale.linear(),e=d3.scale.linear(),c=1,i=1/c,h=false;d.invert=function(g){return b(f.invert(g))};
d.domain=function(g){if(!arguments.length)return f.domain().map(b);h=(g[0]||g[1])<0;f.domain(g.map(a));e.domain(g);return d};d.range=C(d,f.range);d.rangeRound=C(d,f.rangeRound);d.inteprolate=C(d,f.interpolate);d.ticks=e.ticks;d.tickFormat=e.tickFormat;d.exponent=function(g){if(!arguments.length)return c;var k=d.domain();c=g;i=1/g;return d.domain(k)};return d};d3.scale.sqrt=function(){return d3.scale.pow().exponent(0.5)};d3.scale.ordinal=function(){function a(c){c=c in d?d[c]:d[c]=b.push(c)-1;return f[c%
f.length]}var b=[],d={},f=[],e=0;a.domain=function(c){if(!arguments.length)return b;b=c;d={};for(var i=-1,h=-1,g=b.length;++i<g;){c=b[i];c in d||(d[c]=++h)}return a};a.range=function(c){if(!arguments.length)return f;f=c;return a};a.rangePoints=function(c,i){if(arguments.length<2)i=0;var h=c[0],g=c[1],k=(g-h)/(b.length-1+i);f=b.length==1?[(h+g)/2]:d3.range(h+k*i/2,g+k/2,k);e=0;return a};a.rangeBands=function(c,i){if(arguments.length<2)i=0;var h=c[0],g=c[1],k=(g-h)/(b.length+i);f=d3.range(h+k*i,g,k);
e=k*(1-i);return a};a.rangeRoundBands=function(c,i){if(arguments.length<2)i=0;var h=c[0],g=c[1],k=g-h,j=Math.floor(k/(b.length+i));f=d3.range(h+Math.round((k-(b.length-i)*j)/2),g,j);e=Math.round(j*(1-i));return a};a.rangeBand=function(){return e};return a};d3.scale.category10=function(){return d3.scale.ordinal().range($a)};d3.scale.category20=function(){return d3.scale.ordinal().range(ab)};d3.scale.category20b=function(){return d3.scale.ordinal().range(bb)};d3.scale.category20c=function(){return d3.scale.ordinal().range(cb)};
var $a=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],ab=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],bb=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd",
"#de9ed6"],cb=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){function a(){for(var i=-1,h=c.length=e.length,g=f.length/h;++i<h;)c[i]=f[~~(i*g)]}function b(i){if(isNaN(i=+i))return NaN;for(var h=0,g=c.length-1;h<=g;){var k=h+g>>1,j=c[k];if(j<i)h=k+1;else if(j>i)g=k-1;else return k}return g<0?0:g}function d(i){return e[b(i)]}
var f=[],e=[],c=[];d.domain=function(i){if(!arguments.length)return f;f=i.filter(function(h){return!isNaN(h)}).sort(d3.ascending);a();return d};d.range=function(i){if(!arguments.length)return e;e=i;a();return d};d.quantiles=function(){return c};return d};d3.scale.quantize=function(){function a(i){return c[Math.max(0,Math.min(e,Math.floor(f*(i-b))))]}var b=0,d=1,f=2,e=1,c=[0,1];a.domain=function(i){if(!arguments.length)return[b,d];b=i[0];d=i[1];f=c.length/(d-b);return a};a.range=function(i){if(!arguments.length)return c;
c=i;f=c.length/(d-b);e=c.length-1;return a};return a};d3.svg={};d3.svg.arc=function(){function a(c,i){var h=b.call(this,c,i),g=d.call(this,c,i),k=f.call(this,c,i)+O,j=e.call(this,c,i)+O,o=j-k,p=o<Math.PI?"0":"1",m=Math.cos(k);k=Math.sin(k);var n=Math.cos(j);j=Math.sin(j);return o>=db?h?"M0,"+g+"A"+g+","+g+" 0 1,1 0,"+-g+"A"+g+","+g+" 0 1,1 0,"+g+"M0,"+h+"A"+h+","+h+" 0 1,1 0,"+-h+"A"+h+","+h+" 0 1,1 0,"+h+"Z":"M0,"+g+"A"+g+","+g+" 0 1,1 0,"+-g+"A"+g+","+g+" 0 1,1 0,"+g+"Z":h?"M"+g*m+","+g*k+"A"+g+
","+g+" 0 "+p+",1 "+g*n+","+g*j+"L"+h*n+","+h*j+"A"+h+","+h+" 0 "+p+",0 "+h*m+","+h*k+"Z":"M"+g*m+","+g*k+"A"+g+","+g+" 0 "+p+",1 "+g*n+","+g*j+"L0,0Z"}var b=La,d=Ma,f=ja,e=ka;a.innerRadius=function(c){if(!arguments.length)return b;b=v(c);return a};a.outerRadius=function(c){if(!arguments.length)return d;d=v(c);return a};a.startAngle=function(c){if(!arguments.length)return f;f=v(c);return a};a.endAngle=function(c){if(!arguments.length)return e;e=v(c);return a};return a};var O=-Math.PI/2,db=2*Math.PI-
1.0E-6;d3.svg.line=function(){function a(i){return i.length<1?null:"M"+e(Z(this,i,b,d),c)}var b=la,d=ma,f="linear",e=P[f],c=0.7;a.x=function(i){if(!arguments.length)return b;b=i;return a};a.y=function(i){if(!arguments.length)return d;d=i;return a};a.interpolate=function(i){if(!arguments.length)return f;e=P[f=i];return a};a.tension=function(i){if(!arguments.length)return c;c=i;return a};return a};var P={linear:H,basis:function(a){if(a.length<3)return H(a);var b=[],d=1,f=a.length,e=a[0],c=e[0],i=e[1],
h=[c,c,c,(e=a[1])[0]],g=[i,i,i,e[1]];b.push(c,",",i);for(K(b,h,g);++d<f;){e=a[d];h.shift();h.push(e[0]);g.shift();g.push(e[1]);K(b,h,g)}for(d=-1;++d<2;){h.shift();h.push(e[0]);g.shift();g.push(e[1]);K(b,h,g)}return b.join("")},"basis-closed":function(a){for(var b,d=-1,f=a.length,e=f+4,c,i=[],h=[];++d<4;){c=a[d%f];i.push(c[0]);h.push(c[1])}b=[B(L,i),",",B(L,h)];for(--d;++d<e;){c=a[d%f];i.shift();i.push(c[0]);h.shift();h.push(c[1]);K(b,i,h)}return b.join("")},cardinal:function(a,b){if(a.length<3)return H(a);
return a[0]+na(a,oa(a,b))},"cardinal-closed":function(a,b){if(a.length<3)return H(a);return a[0]+na(a,oa([a[a.length-2]].concat(a,[a[1]]),b))}},pa=[0,2/3,1/3,0],qa=[0,1/3,2/3,0],L=[0,1/6,2/3,1/6];d3.svg.area=function(){function a(h){return h.length<1?null:"M"+c(Z(this,h,b,f),i)+"L"+c(Z(this,h,b,d).reverse(),i)+"Z"}var b=la,d=Na,f=ma,e="linear",c=P[e],i=0.7;a.x=function(h){if(!arguments.length)return b;b=h;return a};a.y0=function(h){if(!arguments.length)return d;d=h;return a};a.y1=function(h){if(!arguments.length)return f;
f=h;return a};a.interpolate=function(h){if(!arguments.length)return e;c=P[e=h];return a};a.tension=function(h){if(!arguments.length)return i;i=h;return a};return a};d3.svg.chord=function(){function a(h,g){var k=b(this,d,h,g),j=b(this,f,h,g);return"M"+k.p0+("A"+k.r+","+k.r+" 0 0,1 "+k.p1)+(k.a0==j.a0&&k.a1==j.a1?"Q 0,0 "+k.p0:"Q 0,0 "+j.p0+("A"+j.r+","+j.r+" 0 0,1 "+j.p1)+("Q 0,0 "+k.p0))+"Z"}function b(h,g,k,j){var o=g.call(h,k,j);g=e.call(h,o,j);k=c.call(h,o,j)+O;h=i.call(h,o,j)+O;return{r:g,a0:k,
a1:h,p0:[g*Math.cos(k),g*Math.sin(k)],p1:[g*Math.cos(h),g*Math.sin(h)]}}var d=Oa,f=Pa,e=Qa,c=ja,i=ka;a.radius=function(h){if(!arguments.length)return e;e=v(h);return a};a.source=function(h){if(!arguments.length)return d;d=v(h);return a};a.target=function(h){if(!arguments.length)return f;f=v(h);return a};a.startAngle=function(h){if(!arguments.length)return c;c=v(h);return a};a.endAngle=function(h){if(!arguments.length)return i;i=v(h);return a};return a};d3.svg.mouse=function(a){var b=(a.ownerSVGElement||
a).createSVGPoint();if(ba<0&&(window.scrollX||window.scrollY)){var d=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",0).style("left",0),f=d[0][0].getScreenCTM();ba=!(f.f||f.e);d.remove()}if(ba){b.x=d3.event.pageX;b.y=d3.event.pageY}else{b.x=d3.event.clientX;b.y=d3.event.clientY}b=b.matrixTransform(a.getScreenCTM().inverse());return[b.x,b.y]};var ba=/WebKit/.test(navigator.userAgent)?-1:0;d3.svg.symbol=function(){function a(f,e){return(sa[b.call(this,f,e)]||sa.circle)(d.call(this,
f,e))}var b=Sa,d=Ra;a.type=function(f){if(!arguments.length)return b;b=v(f);return a};a.size=function(f){if(!arguments.length)return d;d=v(f);return a};return a};d3.svg.symbolTypes=["circle","cross","diamond","square","triangle-down","triangle-up"];var sa={circle:function(a){a=Math.sqrt(a/Math.PI);return"M0,"+a+"A"+a+","+a+" 0 1,1 0,"+-a+"A"+a+","+a+" 0 1,1 0,"+a+"Z"},cross:function(a){a=Math.sqrt(a/5)/2;return"M"+-3*a+","+-a+"H"+-a+"V"+-3*a+"H"+a+"V"+-a+"H"+3*a+"V"+a+"H"+a+"V"+3*a+"H"+-a+"V"+a+"H"+
-3*a+"Z"},diamond:function(a){a=Math.sqrt(a/(2*ta));var b=a*ta;return"M0,"+-a+"L"+b+",0 0,"+a+" "+-b+",0Z"},square:function(a){a=Math.sqrt(a)/2;return"M"+-a+","+-a+"L"+a+","+-a+" "+a+","+a+" "+-a+","+a+"Z"},"triangle-down":function(a){a=Math.sqrt(a/Q);var b=a*Q/2;return"M0,"+b+"L"+a+","+-b+" "+-a+","+-b+"Z"},"triangle-up":function(a){a=Math.sqrt(a/Q);var b=a*Q/2;return"M0,"+-b+"L"+a+","+b+" "+-a+","+b+"Z"}},Q=Math.sqrt(3),ta=Math.tan(30*Math.PI/180)})();
(function(){function ua(a){for(var b=-1,d=a.length,g=[];++b<d;)g.push(a[b]);return g}function v(a){return typeof a=="function"?a:function(){return a}}function C(a,b){return function(){var d=b.apply(a,arguments);return arguments.length?a:d}}function va(a){return a==null}function ca(a){return a.replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g," ")}function da(a){arguments[0]=this;a.apply(this,arguments);return this}function wa(){var a={},b=[];a.add=function(d){for(var g=0;g<b.length;g++)if(b[g].listener==
d)return a;b.push({listener:d,on:true});return a};a.remove=function(d){for(var g=0;g<b.length;g++){var e=b[g];if(e.listener==d){e.on=false;b=b.slice(0,g).concat(b.slice(g+1));break}}return a};a.dispatch=function(){for(var d=b,g=0,e=d.length;g<e;g++){var c=d[g];c.on&&c.listener.apply(this,arguments)}};return a}function ea(a){return function(b){return 1-a(1-b)}}function fa(a){return function(b){return 0.5*(b<0.5?a(2*b):2-a(2-2*b))}}function xa(a){return a}function R(a){return function(b){return Math.pow(b,
a)}}function ya(a){return 1-Math.cos(a*Math.PI/2)}function za(a){return a?Math.pow(2,10*(a-1))-0.0010:0}function Aa(a){return 1-Math.sqrt(1-a*a)}function Ba(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}function J(a,b,d){return{r:a,g:b,b:d,toString:Ca}}function Ca(){return"#"+S(this.r)+S(this.g)+S(this.b)}function S(a){return a<16?"0"+a.toString(16):a.toString(16)}function T(a,b,d){var g=0,e=0,c=0,f,h;
if(f=/([a-z]+)\((.*)\)/i.exec(a)){h=f[2].split(",");switch(f[1]){case "hsl":return d(parseFloat(h[0]),parseFloat(h[1])/100,parseFloat(h[2])/100);case "rgb":return b(U(h[0]),U(h[1]),U(h[2]))}}if(d=G[a])return b(d.r,d.g,d.b);if(a!=null&&a.charAt(0)=="#"){if(a.length==4){g=a.charAt(1);g+=g;e=a.charAt(2);e+=e;c=a.charAt(3);c+=c}else if(a.length==7){g=a.substring(1,3);e=a.substring(3,5);c=a.substring(5,7)}g=parseInt(g,16);e=parseInt(e,16);c=parseInt(c,16)}return b(g,e,c)}function Da(a,b,d){var g=Math.min(a/=
255,b/=255,d/=255),e=Math.max(a,b,d),c=e-g,f=(e+g)/2;if(c){g=f<0.5?c/(e+g):c/(2-e-g);a=a==e?(b-d)/c+(b<d?6:0):b==e?(d-a)/c+2:(a-b)/c+4;a*=60}else g=a=0;return V(a,g,f)}function U(a){var b=parseFloat(a);return a.charAt(a.length-1)=="%"?Math.round(b*2.55):b}function V(a,b,d){return{h:a,s:b,l:d,toString:Ea}}function Ea(){return"hsl("+this.h+","+this.s*100+"%,"+this.l*100+"%)"}function ga(a,b,d){function g(f){if(f>360)f-=360;else if(f<0)f+=360;if(f<60)return e+(c-e)*f/60;if(f<180)return c;if(f<240)return e+
(c-e)*(240-f)/60;return e}var e,c;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;d=d<0?0:d>1?1:d;c=d<=0.5?d*(1+b):d+b-d*b;e=2*d-c;return J(Math.round(g(a+120)*255),Math.round(g(a)*255),Math.round(g(a-120)*255))}function y(a){function b(e){for(var c=[],f,h,i,k,j=0,o=a.length;j<o;j++){i=a[j];c.push(f=[]);f.parentNode=i.parentNode;f.parentData=i.parentData;for(var p=0,m=i.length;p<m;p++)if(k=i[p]){f.push(h=e(k));if(h&&"__data__"in k)h.__data__=k.__data__}else f.push(null)}return y(c)}function d(e){for(var c=[],
f,h,i,k=0,j=a.length;k<j;k++){h=a[k];for(var o=0,p=h.length;o<p;o++)if(i=h[o]){c.push(f=e(i));f.parentNode=i;f.parentData=i.__data__}}return y(c)}function g(e){for(var c=0,f=a.length;c<f;c++)for(var h=a[c],i=0,k=h.length;i<k;i++){var j=h[i];if(j)return e.call(j,j.__data__,i)}return null}a.select=function(e){return b(function(c){return D(e,c)})};a.selectAll=function(e){return d(function(c){return ha(e,c)})};a.filter=function(e){for(var c=[],f,h,i,k=0,j=a.length;k<j;k++){h=a[k];c.push(f=[]);f.parentNode=
h.parentNode;f.parentData=h.parentData;for(var o=0,p=h.length;o<p;o++)if((i=h[o])&&e.call(i,i.__data__,o))f.push(i)}return y(c)};a.map=function(e){for(var c,f,h=0,i=a.length;h<i;h++){c=a[h];for(var k=0,j=c.length;k<j;k++)if(f=c[k])f.__data__=e.call(f,f.__data__,k)}return a};a.data=function(e,c){function f(m,n){var l=0,q=m.length,r=n.length,t=Math.min(q,r),u=Math.max(q,r),s=[],z=[],w=[],x,A;if(c){t={};u=[];var E;A=n.length;for(l=0;l<q;l++){E=c.call(x=m[l],x.__data__,l);if(E in t)w[A++]=m[l];else{t[E]=
x;u.push(E)}}for(l=0;l<r;l++){if(x=t[E=c.call(n,A=n[l],l)]){x.__data__=A;s[l]=x;z[l]=w[l]=null}else{z[l]={__data__:A};s[l]=w[l]=null}delete t[E]}for(l=0;l<q;l++)if(u[l]in t)w[l]=m[l]}else{for(;l<t;l++){x=m[l];A=n[l];if(x){x.__data__=A;s[l]=x;z[l]=w[l]=null}else{z[l]={__data__:A};s[l]=w[l]=null}}for(;l<r;l++){z[l]={__data__:n[l]};s[l]=w[l]=null}for(;l<u;l++){w[l]=m[l];z[l]=s[l]=null}}z.parentNode=s.parentNode=w.parentNode=m.parentNode;z.parentData=s.parentData=w.parentData=m.parentData;h.push(z);i.push(s);
k.push(w)}var h=[],i=[],k=[],j=-1,o=a.length,p;if(typeof e=="function")for(;++j<o;)f(p=a[j],e.call(p,p.parentData,j));else for(;++j<o;)f(p=a[j],e);j=y(i);j.enter=function(){return Fa(h)};j.exit=function(){return y(k)};return j};a.each=function(e){for(var c=0,f=a.length;c<f;c++)for(var h=a[c],i=0,k=h.length;i<k;i++){var j=h[i];j&&e.call(j,j.__data__,i)}return a};a.empty=function(){return!g(function(){return true})};a.node=function(){return g(function(){return this})};a.attr=function(e,c){function f(){this.removeAttribute(e)}
function h(){this.removeAttributeNS(e.space,e.local)}function i(){this.setAttribute(e,c)}function k(){this.setAttributeNS(e.space,e.local,c)}function j(){var p=c.apply(this,arguments);p==null?this.removeAttribute(e):this.setAttribute(e,p)}function o(){var p=c.apply(this,arguments);p==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,p)}e=d3.ns.qualify(e);if(arguments.length<2)return g(e.local?function(){return this.getAttributeNS(e.space,e.local)}:function(){return this.getAttribute(e)});
return a.each(c==null?e.local?h:f:typeof c=="function"?e.local?o:j:e.local?k:i)};a.classed=function(e,c){function f(){var j=this.className;k.lastIndex=0;if(!k.test(j))this.className=ca(j+" "+e)}function h(){var j=ca(this.className.replace(k," "));this.className=j.length?j:null}function i(){(c.apply(this,arguments)?f:h).call(this)}var k=RegExp("(^|\\s+)"+d3.requote(e)+"(\\s+|$)","g");if(arguments.length<2)return g(function(){k.lastIndex=0;return k.test(this.className)});return a.each(typeof c=="function"?
i:c?f:h)};a.style=function(e,c,f){function h(){this.style.removeProperty(e)}function i(){this.style.setProperty(e,c,f)}function k(){var j=c.apply(this,arguments);j==null?this.style.removeProperty(e):this.style.setProperty(e,j,f)}if(arguments.length<3)f=null;if(arguments.length<2)return g(function(){return window.getComputedStyle(this,null).getPropertyValue(e)});return a.each(c==null?h:typeof c=="function"?k:i)};a.property=function(e,c){function f(){delete this[e]}function h(){this[e]=c}function i(){var k=
c.apply(this,arguments);if(k==null)delete this[e];else this[e]=k}e=d3.ns.qualify(e);if(arguments.length<2)return g(function(){return this[e]});return a.each(c==null?f:typeof c=="function"?i:h)};a.text=function(e){function c(){this.appendChild(document.createTextNode(e))}function f(){var h=e.apply(this,arguments);h!=null&&this.appendChild(document.createTextNode(h))}if(arguments.length<1)return g(function(){return this.textContent});a.each(function(){for(;this.lastChild;)this.removeChild(this.lastChild)});
return e==null?a:a.each(typeof e=="function"?f:c)};a.html=function(e){function c(){this.innerHTML=e}function f(){this.innerHTML=e.apply(this,arguments)}if(arguments.length<1)return g(function(){return this.innerHTML});return a.each(typeof e=="function"?f:c)};a.append=function(e){function c(h){return h.appendChild(document.createElement(e))}function f(h){return h.appendChild(document.createElementNS(e.space,e.local))}e=d3.ns.qualify(e);return b(e.local?f:c)};a.insert=function(e,c){function f(i){return i.insertBefore(document.createElement(e),
D(c,i))}function h(i){return i.insertBefore(document.createElementNS(e.space,e.local),D(c,i))}e=d3.ns.qualify(e);return b(e.local?h:f)};a.remove=function(){return b(function(e){var c=e.parentNode;c.removeChild(e);return c})};a.sort=function(e){e=Ga.apply(this,arguments);for(var c=0,f=a.length;c<f;c++){var h=a[c];h.sort(e);for(var i=1,k=h.length,j=h[0];i<k;i++){var o=h[i];if(o){j&&j.parentNode.insertBefore(o,j.nextSibling);j=o}}}return a};a.on=function(e,c){var f=e.indexOf("."),h=f==-1?e:e.substring(0,
f),i="__on"+e;return a.each(function(k,j){function o(p){var m=d3.event;d3.event=p;try{c.call(this,k,j)}finally{d3.event=m}}this[i]&&this.removeEventListener(h,this[i],false);if(c)this.addEventListener(h,this[i]=o,false)})};a.transition=function(){return W(a)};a.call=da;return a}function Fa(a){function b(d){for(var g=[],e,c,f,h,i=0,k=a.length;i<k;i++){f=a[i];g.push(e=[]);e.parentNode=f.parentNode;e.parentData=f.parentData;for(var j=0,o=f.length;j<o;j++)if(h=f[j]){e.push(c=d(f.parentNode));c.__data__=
h.__data__}else e.push(null)}return y(g)}a.append=function(d){function g(c){return c.appendChild(document.createElement(d))}function e(c){return c.appendChild(document.createElementNS(d.space,d.local))}d=d3.ns.qualify(d);return b(d.local?e:g)};a.insert=function(d,g){function e(f){return f.insertBefore(document.createElement(d),D(g,f))}function c(f){return f.insertBefore(document.createElementNS(d.space,d.local),D(g,f))}d=d3.ns.qualify(d);return b(d.local?c:e)};return a}function Ga(a){if(!arguments.length)a=
d3.ascending;return function(b,d){return a(b&&b.__data__,d&&d.__data__)}}function W(a){function b(m){var n=true,l=-1;a.each(function(){if(i[++l]!=2){var q=(m-k[l])/j[l],r=this.__transition__,t,u,s=c[l];if(q<1){n=false;if(q<0)return}else q=1;if(i[l]){if(!r||r.active!=g){i[l]=2;return}}else if(!r||r.active>g){i[l]=2;return}else{i[l]=1;h.start.dispatch.apply(this,arguments);s=c[l]={};r.active=g;for(u in e)s[u]=e[u].apply(this,arguments)}t=p(q);for(u in e)s[u].call(this,t);if(q==1){i[l]=2;if(r.active==
g){q=r.owner;if(q==g){delete this.__transition__;f&&this.parentNode.removeChild(this)}X=g;h.end.dispatch.apply(this,arguments);X=0;r.owner=q}}}});return n}var d={},g=X||++Ha,e={},c=[],f=false,h=d3.dispatch("start","end"),i=[],k=[],j=[],o,p=d3.ease("cubic-in-out");a.each(function(){(this.__transition__||(this.__transition__={})).owner=g});d.delay=function(m){var n=Infinity,l=-1;if(typeof m=="function")a.each(function(){var q=k[++l]=+m.apply(this,arguments);if(q<n)n=q});else{n=+m;a.each(function(){k[++l]=
n})}Ia(b,n);return d};d.duration=function(m){var n=-1;if(typeof m=="function"){o=0;a.each(function(){var l=j[++n]=+m.apply(this,arguments);if(l>o)o=l})}else{o=+m;a.each(function(){j[++n]=o})}return d};d.ease=function(m){p=typeof m=="string"?d3.ease(m):m;return d};d.attrTween=function(m,n){function l(r,t){var u=n.call(this,r,t,this.getAttribute(m));return function(s){this.setAttribute(m,u(s))}}function q(r,t){var u=n.call(this,r,t,this.getAttributeNS(m.space,m.local));return function(s){this.setAttributeNS(m.space,
m.local,u(s))}}e["attr."+m]=m.local?q:l;return d};d.attr=function(m,n){return d.attrTween(m,ia(n))};d.styleTween=function(m,n,l){if(arguments.length<3)l=null;e["style."+m]=function(q,r){var t=n.call(this,q,r,window.getComputedStyle(this,null).getPropertyValue(m));return function(u){this.style.setProperty(m,t(u),l)}};return d};d.style=function(m,n,l){if(arguments.length<3)l=null;return d.styleTween(m,ia(n),l)};d.select=function(m){var n;m=W(a.select(m)).ease(p);n=-1;m.delay(function(){return k[++n]});
n=-1;m.duration(function(){return j[++n]});return m};d.selectAll=function(m){var n;m=W(a.selectAll(m)).ease(p);n=-1;m.delay(function(l,q){return k[q?n:++n]});n=-1;m.duration(function(l,q){return j[q?n:++n]});return m};d.remove=function(){f=true;return d};d.each=function(m,n){h[m].add(n);return d};d.call=da;return d.delay(0).duration(250)}function ia(a){return typeof a=="function"?function(b,d,g){return d3.interpolate(g,String(a.call(this,b,d)))}:(a=String(a),function(b,d,g){return d3.interpolate(g,
a)})}function Ia(a,b){var d=Date.now(),g=false,e=d+b,c=F;if(isFinite(b)){for(;c;){if(c.callback==a){c.then=d;c.delay=b;g=true}else{var f=c.then+c.delay;if(f<e)e=f}c=c.next}g||(F={callback:a,then:d,delay:b,next:F});if(!K){clearTimeout(Y);Y=setTimeout(Ja,Math.max(24,e-d))}}}function Ja(){K=setInterval(Ka,24);Y=0}function Ka(){for(var a,b=Date.now(),d=F;d;){a=b-d.then;if(a>d.delay)d.flush=d.callback(a);d=d.next}a=null;for(b=F;b;)b=b.flush?a?a.next=b.next:F=b.next:(a=b).next;a||(K=clearInterval(K))}function La(a){return a.innerRadius}
function Ma(a){return a.outerRadius}function ja(a){return a.startAngle}function ka(a){return a.endAngle}function Z(a,b,d,g){var e=[],c=-1,f=b.length,h=typeof d=="function",i=typeof g=="function",k;if(h&&i)for(;++c<f;)e.push([d.call(a,k=b[c],c),g.call(a,k,c)]);else if(h)for(;++c<f;)e.push([d.call(a,b[c],c),g]);else if(i)for(;++c<f;)e.push([d,g.call(a,b[c],c)]);else for(;++c<f;)e.push([d,g]);return e}function la(a){return a[0]}function ma(a){return a[1]}function H(a){var b=[],d=0,g=a.length,e=a[0];
for(b.push(e[0],",",e[1]);++d<g;)b.push("L",(e=a[d])[0],",",e[1]);return b.join("")}function na(a,b){if(b.length<1||a.length!=b.length&&a.length!=b.length+2)return H(a);var d=a.length!=b.length,g="",e=a[0],c=a[1],f=b[0],h=f,i=1;if(d){g+="Q"+(c[0]-f[0]*2/3)+","+(c[1]-f[1]*2/3)+","+c[0]+","+c[1];e=a[1];i=2}if(b.length>1){h=b[1];c=a[i];i++;g+="C"+(e[0]+f[0])+","+(e[1]+f[1])+","+(c[0]-h[0])+","+(c[1]-h[1])+","+c[0]+","+c[1];for(e=2;e<b.length;e++,i++){c=a[i];h=b[e];g+="S"+(c[0]-h[0])+","+(c[1]-h[1])+
","+c[0]+","+c[1]}}if(d){d=a[i];g+="Q"+(c[0]+h[0]*2/3)+","+(c[1]+h[1]*2/3)+","+d[0]+","+d[1]}return g}function oa(a,b){for(var d=[],g=(1-b)/2,e=a[0],c=a[1],f=a[2],h=2,i=a.length;++h<i;){d.push([g*(f[0]-e[0]),g*(f[1]-e[1])]);e=c;c=f;f=a[h]}d.push([g*(f[0]-e[0]),g*(f[1]-e[1])]);return d}function B(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function L(a,b,d){a.push("C",B(pa,b),",",B(pa,d),",",B(qa,b),",",B(qa,d),",",B(M,b),",",B(M,d))}function Na(){return 0}function Oa(a){return a.source}function Pa(a){return a.target}
function Qa(a){return a.radius}function Ra(){return 64}function Sa(){return"circle"}d3={version:"1.2.0"};if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(a){function b(){}b.prototype=a;return new b};var N=function(a){return Array.prototype.slice.call(a)};try{N(document.documentElement.childNodes)}catch(eb){N=ua}d3.ascending=function(a,b){return a<b?-1:a>b?1:0};d3.descending=function(a,b){return b<a?-1:b>a?1:0};d3.min=function(a,b){var d=0,g=a.length,e=a[0],
c;if(arguments.length==1)for(;++d<g;){if(e>(c=a[d]))e=c}else for(e=b(a[0]);++d<g;)if(e>(c=b(a[d])))e=c;return e};d3.max=function(a,b){var d=0,g=a.length,e=a[0],c;if(arguments.length==1)for(;++d<g;){if(e<(c=a[d]))e=c}else for(e=b(e);++d<g;)if(e<(c=b(a[d])))e=c;return e};d3.nest=function(){function a(c,f){if(c>=d.length)return e?e.call(b,f):g?f.sort(g):f;for(var h=-1,i=f.length,k=d[c],j,o=[],p,m={};++h<i;)if((j=k(p=f[h]))in m)m[j].push(p);else{m[j]=[p];o.push(j)}c++;h=-1;for(i=o.length;++h<i;){p=m[j=
o[h]];m[j]=a(c,p)}return m}var b={},d=[],g,e;b.map=function(c){return a(0,c)};b.key=function(c){d.push(c);return b};b.sortKeys=function(){return b};b.sortValues=function(c){g=c;return b};b.rollup=function(c){e=c;return b};return b};d3.keys=function(a){var b=[],d;for(d in a)b.push(d);return b};d3.values=function(a){var b=[],d;for(d in a)b.push(a[d]);return b};d3.entries=function(a){var b=[],d;for(d in a)b.push({key:d,value:a[d]});return b};d3.merge=function(a){return Array.prototype.concat.apply([],
a)};d3.split=function(a,b){var d=[],g=[],e,c=-1,f=a.length;if(arguments.length<2)b=va;for(;++c<f;)if(b.call(g,e=a[c],c))g=[];else{g.length||d.push(g);g.push(e)}return d};d3.range=function(a,b,d){if(arguments.length==1){b=a;a=0}if(d==null)d=1;if((b-a)/d==Infinity)throw Error("infinite range");var g=[],e=-1,c;if(d<0)for(;(c=a+d*++e)>b;)g.push(c);else for(;(c=a+d*++e)<b;)g.push(c);return g};d3.requote=function(a){return a.replace(Ta,"\\$&")};var Ta=/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;d3.xhr=function(a,b,
d){var g=new XMLHttpRequest;if(arguments.length<3)d=b;else b&&g.overrideMimeType(b);g.open("GET",a,true);g.onreadystatechange=function(){if(g.readyState==4)d(g.status<300?g:null)};g.send(null)};d3.text=function(a,b,d){if(arguments.length<3){d=b;b=null}d3.xhr(a,b,function(g){d(g&&g.responseText)})};d3.json=function(a,b){d3.text(a,"application/json",function(d){b(d?JSON.parse(d):null)})};d3.html=function(a,b){d3.text(a,"text/html",function(d){if(d!=null){var g=document.createRange();g.selectNode(document.body);
d=g.createContextualFragment(d)}b(d)})};d3.xml=function(a,b,d){if(arguments.length<3){d=b;b=null}d3.xhr(a,b,function(g){d(g&&g.responseXML)})};d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)],local:a.substring(b+1)}}};d3.dispatch=function(){for(var a={},
b,d=0,g=arguments.length;d<g;d++){b=arguments[d];a[b]=wa(b)}return a};d3.format=function(a){a=Ua.exec(a);var b=a[1]||" ",d=ra[a[3]]||ra["-"],g=a[5],e=+a[6],c=a[7],f=a[8],h=a[9];if(f)f=f.substring(1);if(g)b="0";if(h=="d")f="0";return function(i){i=+i;var k=i<0&&(i=-i);if(h=="d"&&i%1)return"";i=f?i.toFixed(f):""+i;if(c){for(var j=i.lastIndexOf("."),o=j>=0?i.substring(j):(j=i.length,""),p=[];j>0;)p.push(i.substring(j-=3,j+3));i=p.reverse().join(",")+o}k=(i=d(k,i)).length;if(k<e)i=Array(e-k+1).join(b)+
i;return i}};var Ua=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,ra={"+":function(a,b){return(a?"":"+")+b}," ":function(a,b){return(a?"":" ")+b},"-":function(a,b){return a?""+b:b}},Va=R(2),Wa=R(3),Xa={linear:function(){return xa},poly:R,quad:function(){return Va},cubic:function(){return Wa},sin:function(){return ya},exp:function(){return za},circle:function(){return Aa},elastic:function(a,b){var d;if(arguments.length<2)b=0.45;if(arguments.length<1){a=1;d=b/4}else d=
b/(2*Math.PI)*Math.asin(1/a);return function(g){return 1+a*Math.pow(2,10*-g)*Math.sin((g-d)*2*Math.PI/b)}},back:function(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}},bounce:function(){return Ba}},Ya={"in":function(a){return a},out:ea,"in-out":fa,"out-in":function(a){return fa(ea(a))}};d3.ease=function(a){var b=a.indexOf("-"),d=b>=0?a.substring(0,b):a;b=b>=0?a.substring(b+1):"in";return Ya[b](Xa[d].apply(null,Array.prototype.slice.call(arguments,1)))};d3.event=null;d3.interpolate=
function(a,b){if(typeof b=="number")return d3.interpolateNumber(+a,b);if(typeof b=="string")return b in G||/^(#|rgb\(|hsl\()/.test(b)?d3.interpolateRgb(String(a),b):d3.interpolateString(String(a),b);if(b instanceof Array)return d3.interpolateArray(a,b);return d3.interpolateObject(a,b)};d3.interpolateNumber=function(a,b){b-=a;return function(d){return a+b*d}};d3.interpolateRound=function(a,b){b-=a;return function(d){return Math.round(a+b*d)}};d3.interpolateString=function(a,b){var d,g,e=0,c=[],f=[],
h,i;for(g=0;d=$.exec(b);++g){d.index&&c.push(b.substring(e,d.index));f.push({i:c.length,x:d[0]});c.push(null);e=$.lastIndex}e<b.length&&c.push(b.substring(e));g=0;for(h=f.length;(d=$.exec(a))&&g<h;++g){i=f[g];if(i.x==d[0]){if(i.i)if(c[i.i+1]==null){c[i.i-1]+=i.x;c.splice(i.i,1);for(d=g+1;d<h;++d)f[d].i--}else{c[i.i-1]+=i.x+c[i.i+1];c.splice(i.i,2);for(d=g+1;d<h;++d)f[d].i-=2}else if(c[i.i+1]==null)c[i.i]=i.x;else{c[i.i]=i.x+c[i.i+1];c.splice(i.i+1,1);for(d=g+1;d<h;++d)f[d].i--}f.splice(g,1);h--;g--}else i.x=
d3.interpolateNumber(parseFloat(d[0]),parseFloat(i.x))}for(;g<h;){i=f.pop();if(c[i.i+1]==null)c[i.i]=i.x;else{c[i.i]=i.x+c[i.i+1];c.splice(i.i+1,1)}h--}if(c.length==1)return c[0]==null?f[0].x:function(){return b};return function(k){for(g=0;g<h;++g)c[(i=f[g]).i]=i.x(k);return c.join("")}};d3.interpolateRgb=function(a,b){a=d3.rgb(a);b=d3.rgb(b);var d=a.r,g=a.g,e=a.b,c=b.r-d,f=b.g-g,h=b.b-e;return function(i){return"rgb("+Math.round(d+c*i)+","+Math.round(g+f*i)+","+Math.round(e+h*i)+")"}};d3.interpolateArray=
function(a,b){var d=[],g=[],e=a.length,c=b.length,f=Math.min(a.length,b.length),h;for(h=0;h<f;++h)d.push(d3.interpolate(a[h],b[h]));for(;h<e;++h)g[h]=a[h];for(;h<c;++h)g[h]=b[h];return function(i){for(h=0;h<f;++h)g[h]=d[h](i);return g}};d3.interpolateObject=function(a,b){var d={},g={},e;for(e in a)if(e in b)d[e]=(e in Za||/\bcolor\b/.test(e)?d3.interpolateRgb:d3.interpolate)(a[e],b[e]);else g[e]=a[e];for(e in b)e in a||(g[e]=b[e]);return function(c){for(e in d)g[e]=d[e](c);return g}};var $=/[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,
Za={background:1,fill:1,stroke:1};d3.rgb=function(a,b,d){return arguments.length==1?T(""+a,J,ga):J(~~a,~~b,~~d)};var G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",
darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",
firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",
lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",
mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",
rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},
aa;for(aa in G)G[aa]=T(G[aa],J,ga);d3.hsl=function(a,b,d){return arguments.length==1?T(""+a,Da,V):V(+a,+b,+d)};var D=function(a,b){return b.querySelector(a)},ha=function(a,b){return N(b.querySelectorAll(a))};if(typeof Sizzle=="function"){D=function(a,b){return Sizzle(a,b)[0]};ha=Sizzle}var O=y([[document]]);O[0].parentNode=document.documentElement;d3.select=function(a){return typeof a=="string"?O.select(a):y([[a]])};d3.selectAll=function(a){return typeof a=="string"?O.selectAll(a):y([N(a)])};d3.transition=
O.transition;var Ha=0,X=0,F=null,Y=0,K;d3.scale={};d3.scale.linear=function(){function a(j){return k((j-d)*f)}function b(j){var o=Math.min(d,g),p=Math.max(d,g),m=p-o,n=Math.pow(10,Math.floor(Math.log(m/j)/Math.LN10));j=j/(m/n);if(j<=0.15)n*=10;else if(j<=0.35)n*=5;else if(j<=0.75)n*=2;return{start:Math.ceil(o/n)*n,stop:Math.floor(p/n)*n+n*0.5,step:n}}var d=0,g=1,e=0,c=1,f=1/(g-d),h=(g-d)/(c-e),i=d3.interpolate,k=i(e,c);a.invert=function(j){return(j-e)*h+d};a.domain=function(j){if(!arguments.length)return[d,
g];d=j[0];g=j[1];f=1/(g-d);h=(g-d)/(c-e);return a};a.range=function(j){if(!arguments.length)return[e,c];e=j[0];c=j[1];h=(g-d)/(c-e);k=i(e,c);return a};a.rangeRound=function(j){return a.range(j).interpolate(d3.interpolateRound)};a.interpolate=function(j){if(!arguments.length)return i;k=(i=j)(e,c);return a};a.ticks=function(j){j=b(j);return d3.range(j.start,j.stop,j.step)};a.tickFormat=function(j){j=Math.max(0,-Math.floor(Math.log(b(j).step)/Math.LN10+0.01));return d3.format(",."+j+"f")};return a};
d3.scale.log=function(){function a(c){return(e?-Math.log(-c):Math.log(c))/Math.LN10}function b(c){return e?-Math.pow(10,-c):Math.pow(10,c)}function d(c){return g(a(c))}var g=d3.scale.linear(),e=false;d.invert=function(c){return b(g.invert(c))};d.domain=function(c){if(!arguments.length)return g.domain().map(b);e=(c[0]||c[1])<0;g.domain(c.map(a));return d};d.range=C(d,g.range);d.rangeRound=C(d,g.rangeRound);d.interpolate=C(d,g.interpolate);d.ticks=function(){var c=g.domain(),f=[];if(c.every(isFinite)){var h=
Math.floor(c[0]),i=Math.ceil(c[1]),k=b(c[0]);c=b(c[1]);if(e)for(f.push(b(h));h++<i;)for(var j=9;j>0;j--)f.push(b(h)*j);else{for(;h<i;h++)for(j=1;j<10;j++)f.push(b(h)*j);f.push(b(h))}for(h=0;f[h]<k;h++);for(i=f.length;f[i-1]>c;i--);f=f.slice(h,i)}return f};d.tickFormat=function(){return function(c){return c.toPrecision(1)}};return d};d3.scale.pow=function(){function a(i){return h?-Math.pow(-i,c):Math.pow(i,c)}function b(i){return h?-Math.pow(-i,f):Math.pow(i,f)}function d(i){return g(a(i))}var g=d3.scale.linear(),
e=d3.scale.linear(),c=1,f=1/c,h=false;d.invert=function(i){return b(g.invert(i))};d.domain=function(i){if(!arguments.length)return g.domain().map(b);h=(i[0]||i[1])<0;g.domain(i.map(a));e.domain(i);return d};d.range=C(d,g.range);d.rangeRound=C(d,g.rangeRound);d.inteprolate=C(d,g.interpolate);d.ticks=e.ticks;d.tickFormat=e.tickFormat;d.exponent=function(i){if(!arguments.length)return c;var k=d.domain();c=i;f=1/i;return d.domain(k)};return d};d3.scale.sqrt=function(){return d3.scale.pow().exponent(0.5)};
d3.scale.ordinal=function(){function a(c){c=c in d?d[c]:d[c]=b.push(c)-1;return g[c%g.length]}var b=[],d={},g=[],e=0;a.domain=function(c){if(!arguments.length)return b;b=c;d={};for(var f=-1,h=-1,i=b.length;++f<i;){c=b[f];c in d||(d[c]=++h)}return a};a.range=function(c){if(!arguments.length)return g;g=c;return a};a.rangePoints=function(c,f){if(arguments.length<2)f=0;var h=c[0],i=c[1],k=(i-h)/(b.length-1+f);g=b.length==1?[(h+i)/2]:d3.range(h+k*f/2,i+k/2,k);e=0;return a};a.rangeBands=function(c,f){if(arguments.length<
2)f=0;var h=c[0],i=c[1],k=(i-h)/(b.length+f);g=d3.range(h+k*f,i,k);e=k*(1-f);return a};a.rangeRoundBands=function(c,f){if(arguments.length<2)f=0;var h=c[0],i=c[1],k=i-h,j=Math.floor(k/(b.length+f));g=d3.range(h+Math.round((k-(b.length-f)*j)/2),i,j);e=Math.round(j*(1-f));return a};a.rangeBand=function(){return e};return a};d3.scale.category10=function(){return d3.scale.ordinal().range($a)};d3.scale.category20=function(){return d3.scale.ordinal().range(ab)};d3.scale.category20b=function(){return d3.scale.ordinal().range(bb)};
d3.scale.category20c=function(){return d3.scale.ordinal().range(cb)};var $a=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],ab=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],bb=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94",
"#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],cb=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){function a(){for(var f=-1,h=c.length=e.length,i=g.length/h;++f<h;)c[f]=g[~~(f*i)]}function b(f){if(isNaN(f=+f))return NaN;for(var h=0,i=c.length-1;h<=i;){var k=h+i>>1,j=c[k];if(j<f)h=k+1;
else if(j>f)i=k-1;else return k}return i<0?0:i}function d(f){return e[b(f)]}var g=[],e=[],c=[];d.domain=function(f){if(!arguments.length)return g;g=f.filter(function(h){return!isNaN(h)}).sort(d3.ascending);a();return d};d.range=function(f){if(!arguments.length)return e;e=f;a();return d};d.quantiles=function(){return c};return d};d3.scale.quantize=function(){function a(f){return c[Math.max(0,Math.min(e,Math.floor(g*(f-b))))]}var b=0,d=1,g=2,e=1,c=[0,1];a.domain=function(f){if(!arguments.length)return[b,
d];b=f[0];d=f[1];g=c.length/(d-b);return a};a.range=function(f){if(!arguments.length)return c;c=f;g=c.length/(d-b);e=c.length-1;return a};return a};d3.svg={};d3.svg.arc=function(){function a(){var c=b.apply(this,arguments),f=d.apply(this,arguments),h=g.apply(this,arguments)+I,i=e.apply(this,arguments)+I,k=i-h,j=k<Math.PI?"0":"1",o=Math.cos(h);h=Math.sin(h);var p=Math.cos(i);i=Math.sin(i);return k>=db?c?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+c+"A"+c+","+c+" 0 1,1 0,"+-c+
"A"+c+","+c+" 0 1,1 0,"+c+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":c?"M"+f*o+","+f*h+"A"+f+","+f+" 0 "+j+",1 "+f*p+","+f*i+"L"+c*p+","+c*i+"A"+c+","+c+" 0 "+j+",0 "+c*o+","+c*h+"Z":"M"+f*o+","+f*h+"A"+f+","+f+" 0 "+j+",1 "+f*p+","+f*i+"L0,0Z"}var b=La,d=Ma,g=ja,e=ka;a.innerRadius=function(c){if(!arguments.length)return b;b=v(c);return a};a.outerRadius=function(c){if(!arguments.length)return d;d=v(c);return a};a.startAngle=function(c){if(!arguments.length)return g;g=v(c);
return a};a.endAngle=function(c){if(!arguments.length)return e;e=v(c);return a};a.centroid=function(){var c=(b.apply(this,arguments)+d.apply(this,arguments))/2,f=(g.apply(this,arguments)+e.apply(this,arguments))/2+I;return[Math.cos(f)*c,Math.sin(f)*c]};return a};var I=-Math.PI/2,db=2*Math.PI-1.0E-6;d3.svg.line=function(){function a(f){return f.length<1?null:"M"+e(Z(this,f,b,d),c)}var b=la,d=ma,g="linear",e=P[g],c=0.7;a.x=function(f){if(!arguments.length)return b;b=f;return a};a.y=function(f){if(!arguments.length)return d;
d=f;return a};a.interpolate=function(f){if(!arguments.length)return g;e=P[g=f];return a};a.tension=function(f){if(!arguments.length)return c;c=f;return a};return a};var P={linear:H,basis:function(a){if(a.length<3)return H(a);var b=[],d=1,g=a.length,e=a[0],c=e[0],f=e[1],h=[c,c,c,(e=a[1])[0]],i=[f,f,f,e[1]];b.push(c,",",f);for(L(b,h,i);++d<g;){e=a[d];h.shift();h.push(e[0]);i.shift();i.push(e[1]);L(b,h,i)}for(d=-1;++d<2;){h.shift();h.push(e[0]);i.shift();i.push(e[1]);L(b,h,i)}return b.join("")},"basis-closed":function(a){for(var b,
d=-1,g=a.length,e=g+4,c,f=[],h=[];++d<4;){c=a[d%g];f.push(c[0]);h.push(c[1])}b=[B(M,f),",",B(M,h)];for(--d;++d<e;){c=a[d%g];f.shift();f.push(c[0]);h.shift();h.push(c[1]);L(b,f,h)}return b.join("")},cardinal:function(a,b){if(a.length<3)return H(a);return a[0]+na(a,oa(a,b))},"cardinal-closed":function(a,b){if(a.length<3)return H(a);return a[0]+na(a,oa([a[a.length-2]].concat(a,[a[1]]),b))}},pa=[0,2/3,1/3,0],qa=[0,1/3,2/3,0],M=[0,1/6,2/3,1/6];d3.svg.area=function(){function a(h){return h.length<1?null:
"M"+c(Z(this,h,b,g),f)+"L"+c(Z(this,h,b,d).reverse(),f)+"Z"}var b=la,d=Na,g=ma,e="linear",c=P[e],f=0.7;a.x=function(h){if(!arguments.length)return b;b=h;return a};a.y0=function(h){if(!arguments.length)return d;d=h;return a};a.y1=function(h){if(!arguments.length)return g;g=h;return a};a.interpolate=function(h){if(!arguments.length)return e;c=P[e=h];return a};a.tension=function(h){if(!arguments.length)return f;f=h;return a};return a};d3.svg.chord=function(){function a(h,i){var k=b(this,d,h,i),j=b(this,
g,h,i);return"M"+k.p0+("A"+k.r+","+k.r+" 0 0,1 "+k.p1)+(k.a0==j.a0&&k.a1==j.a1?"Q 0,0 "+k.p0:"Q 0,0 "+j.p0+("A"+j.r+","+j.r+" 0 0,1 "+j.p1)+("Q 0,0 "+k.p0))+"Z"}function b(h,i,k,j){var o=i.call(h,k,j);i=e.call(h,o,j);k=c.call(h,o,j)+I;h=f.call(h,o,j)+I;return{r:i,a0:k,a1:h,p0:[i*Math.cos(k),i*Math.sin(k)],p1:[i*Math.cos(h),i*Math.sin(h)]}}var d=Oa,g=Pa,e=Qa,c=ja,f=ka;a.radius=function(h){if(!arguments.length)return e;e=v(h);return a};a.source=function(h){if(!arguments.length)return d;d=v(h);return a};
a.target=function(h){if(!arguments.length)return g;g=v(h);return a};a.startAngle=function(h){if(!arguments.length)return c;c=v(h);return a};a.endAngle=function(h){if(!arguments.length)return f;f=v(h);return a};return a};d3.svg.mouse=function(a){var b=(a.ownerSVGElement||a).createSVGPoint();if(ba<0&&(window.scrollX||window.scrollY)){var d=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",0).style("left",0),g=d[0][0].getScreenCTM();ba=!(g.f||g.e);d.remove()}if(ba){b.x=
d3.event.pageX;b.y=d3.event.pageY}else{b.x=d3.event.clientX;b.y=d3.event.clientY}b=b.matrixTransform(a.getScreenCTM().inverse());return[b.x,b.y]};var ba=/WebKit/.test(navigator.userAgent)?-1:0;d3.svg.symbol=function(){function a(g,e){return(sa[b.call(this,g,e)]||sa.circle)(d.call(this,g,e))}var b=Sa,d=Ra;a.type=function(g){if(!arguments.length)return b;b=v(g);return a};a.size=function(g){if(!arguments.length)return d;d=v(g);return a};return a};d3.svg.symbolTypes=["circle","cross","diamond","square",
"triangle-down","triangle-up"];var sa={circle:function(a){a=Math.sqrt(a/Math.PI);return"M0,"+a+"A"+a+","+a+" 0 1,1 0,"+-a+"A"+a+","+a+" 0 1,1 0,"+a+"Z"},cross:function(a){a=Math.sqrt(a/5)/2;return"M"+-3*a+","+-a+"H"+-a+"V"+-3*a+"H"+a+"V"+-a+"H"+3*a+"V"+a+"H"+a+"V"+3*a+"H"+-a+"V"+a+"H"+-3*a+"Z"},diamond:function(a){a=Math.sqrt(a/(2*ta));var b=a*ta;return"M0,"+-a+"L"+b+",0 0,"+a+" "+-b+",0Z"},square:function(a){a=Math.sqrt(a)/2;return"M"+-a+","+-a+"L"+a+","+-a+" "+a+","+a+" "+-a+","+a+"Z"},"triangle-down":function(a){a=
Math.sqrt(a/Q);var b=a*Q/2;return"M0,"+b+"L"+a+","+-b+" "+-a+","+-b+"Z"},"triangle-up":function(a){a=Math.sqrt(a/Q);var b=a*Q/2;return"M0,"+-b+"L"+a+","+b+" "+-a+","+b+"Z"}},Q=Math.sqrt(3),ta=Math.tan(30*Math.PI/180)})();

Просмотреть файл

@ -2,6 +2,7 @@
<head>
<title>Donut Chart</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
<style type="text/css">
body {
@ -18,9 +19,13 @@ var w = 400,
r1 = Math.min(w, h) / 2,
r0 = r1 * .6,
n = 10,
data = arcs(d3.range(n).map(Math.random)),
q = 0,
data0 = d3.range(n).map(Math.random),
data1 = d3.range(n).map(Math.random),
data,
color = d3.scale.category20(),
arc = d3.svg.arc();
arc = d3.svg.arc(),
donut = d3.layout.pie();
var vis = d3.select("body")
.append("svg:svg")
@ -28,7 +33,7 @@ var vis = d3.select("body")
.attr("height", h);
vis.selectAll("g.arc")
.data(data)
.data(arcs(data0, data1))
.enter().append("svg:g")
.attr("class", "arc")
.attr("transform", "translate(" + r1 + "," + r1 + ")")
@ -36,22 +41,32 @@ vis.selectAll("g.arc")
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc);
window.addEventListener("keypress", update, false);
window.addEventListener("keypress", swap, false);
function update() {
var prev = data,
next = data = arcs(d3.range(n).map(Math.random)),
i = 0;
for (; i < n; ++i) prev[i].next = next[i];
function arcs(data0, data1) {
var arcs0 = donut(data0),
arcs1 = donut(data1),
i = -1,
arc;
while (++i < n) {
arc = arcs0[i];
arc.innerRadius = r0;
arc.outerRadius = r1;
arc.next = arcs1[i];
}
return arcs0;
}
function swap() {
d3.selectAll("g.arc > path")
.data(prev)
.data(++q & 1 ? arcs(data0, data1) : arcs(data1, data0))
.each(transitionSplit);
}
// 1. Wedges split into two rings.
function transitionSplit(d, i) {
d3.select(this)
.transition()
.transition().duration(1000)
.attrTween("d", tweenArc({
innerRadius: i & 1 ? r0 : (r0 + r1) / 2,
outerRadius: i & 1 ? (r0 + r1) / 2 : r1
@ -64,7 +79,7 @@ function transitionRotate(d, i) {
var a0 = d.next.startAngle + d.next.endAngle,
a1 = d.startAngle - d.endAngle;
d3.select(this)
.transition()
.transition().duration(1000)
.attrTween("d", tweenArc({
startAngle: (a0 + a1) / 2,
endAngle: (a0 - a1) / 2
@ -75,7 +90,7 @@ function transitionRotate(d, i) {
// 3. Wedges then update their values, changing size.
function transitionResize(d, i) {
d3.select(this)
.transition()
.transition().duration(1000)
.attrTween("d", tweenArc({
startAngle: d.next.startAngle,
endAngle: d.next.endAngle
@ -86,10 +101,10 @@ function transitionResize(d, i) {
// 4. Wedges reunite into a single ring.
function transitionUnite(d, i) {
d3.select(this)
.transition()
.transition().duration(1000)
.attrTween("d", tweenArc({
innerRadius: d.next.innerRadius,
outerRadius: d.next.outerRadius
innerRadius: r0,
outerRadius: r1
}));
}
@ -103,19 +118,6 @@ function tweenArc(b) {
};
}
function arcs(values) {
var k = (2 * Math.PI) / values.reduce(function(p, d) { return p + d; }, 0),
a = 0;
return values.map(function(d, i) {
return {
startAngle: a,
endAngle: a += d * k,
innerRadius: r0,
outerRadius: r1
};
});
}
</script>
</body>
</html>

Просмотреть файл

@ -2,6 +2,7 @@
<head>
<title>Pie Chart</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
<style type="text/css">
body {
@ -16,8 +17,10 @@ body {
var w = 400,
h = 400,
r = Math.min(w, h) / 2,
data = normalize(d3.range(10).map(Math.random).sort(descending)),
color = d3.scale.category20();
data = d3.range(10).map(Math.random),
color = d3.scale.category20(),
arc = d3.svg.arc().outerRadius(r),
donut = d3.layout.pie().sort(d3.descending);
var vis = d3.select("body")
.append("svg:svg")
@ -25,7 +28,7 @@ var vis = d3.select("body")
.attr("height", h);
var arcs = vis.selectAll("g.arc")
.data(data)
.data(donut(data))
.enter().append("svg:g")
.attr("class", "arc")
.attr("transform", "translate(" + r + "," + r + ")");
@ -60,55 +63,6 @@ function tweenDonut(b) {
};
}
function normalize(array) {
var k = (2 * Math.PI) / array.reduce(function(p, d) { return p + d; }, 0),
a = 0;
return array.map(function(d, i) {
return {
value: d,
innerRadius: r * .6,
outerRadius: r,
startAngle: a,
midAngle: a + d * k / 2 - Math.PI / 2,
endAngle: a += d * k
};
});
}
function arc(d) {
var r0 = d.innerRadius,
r1 = d.outerRadius,
a0 = d.startAngle - Math.PI / 2,
a1 = d.endAngle - Math.PI / 2,
da = a1 - a0,
c0 = Math.cos(a0),
s0 = Math.sin(a0),
c1 = Math.cos(a1),
s1 = Math.sin(a1);
return "M" + r1 * c0 + "," + r1 * s0
+ "A" + r1 + "," + r1 + " 0 "
+ ((da < Math.PI) ? "0" : "1") + ",1 "
+ r1 * c1 + "," + r1 * s1
+ "L" + r0 * c1 + "," + r0 * s1
+ "A" + r0 + "," + r0 + " 0 "
+ ((da < Math.PI) ? "0" : "1") + ",0 "
+ r0 * c0 + "," + r0 * s0 + "Z";
}
function upright(a) {
a = a % (2 * Math.PI);
a = a < 0 ? 2 * Math.PI + a : a;
return a < Math.PI / 2 || a >= 3 * Math.PI / 2;
}
function ascending(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
}
function descending(a, b) {
return a < b ? 1 : a > b ? -1 : 0;
}
</script>
</body>
</html>

Просмотреть файл

@ -2,6 +2,7 @@
<head>
<title>Pie Chart</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.layout.js"></script>
<style type="text/css">
body {
@ -16,8 +17,10 @@ body {
var w = 400,
h = 400,
r = Math.min(w, h) / 2,
data = normalize(d3.range(10).map(Math.random).sort(descending)),
color = d3.scale.category20();
data = d3.range(10).map(Math.random),
color = d3.scale.category20(),
donut = d3.layout.pie().sort(d3.descending),
arc = d3.svg.arc().innerRadius(r * .6).outerRadius(r);
var vis = d3.select("body")
.append("svg:svg")
@ -25,7 +28,7 @@ var vis = d3.select("body")
.attr("height", h);
var arcs = vis.selectAll("g.arc")
.data(data)
.data(donut(data))
.enter().append("svg:g")
.attr("class", "arc")
.attr("transform", "translate(" + r + "," + r + ")");
@ -35,56 +38,12 @@ arcs.append("svg:path")
.attr("d", arc);
arcs.append("svg:text")
.attr("x", function(d) { return Math.cos(d.midAngle) * r * .8; })
.attr("y", function(d) { return Math.sin(d.midAngle) * r * .8; })
.attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
.attr("dy", ".35em")
.attr("text-anchor", "middle")
.attr("display", function(d) { return d.value > .15 ? null : "none"; })
.text(function(d, i) { return d.value.toFixed(2); });
function normalize(array) {
var k = (2 * Math.PI) / array.reduce(function(p, d) { return p + d; }, 0),
a = 0;
return array.map(function(d, i) {
return {
value: d,
innerRadius: r * .6,
outerRadius: r,
startAngle: a,
midAngle: a + d * k / 2 - Math.PI / 2,
endAngle: a += d * k
};
});
}
function arc(d) {
var r0 = d.innerRadius,
r1 = d.outerRadius,
a0 = d.startAngle - Math.PI / 2,
a1 = d.endAngle - Math.PI / 2,
da = a1 - a0,
c0 = Math.cos(a0),
s0 = Math.sin(a0),
c1 = Math.cos(a1),
s1 = Math.sin(a1);
return "M" + r1 * c0 + "," + r1 * s0
+ "A" + r1 + "," + r1 + " 0 "
+ ((da < Math.PI) ? "0" : "1") + ",1 "
+ r1 * c1 + "," + r1 * s1
+ "L" + r0 * c1 + "," + r0 * s1
+ "A" + r0 + "," + r0 + " 0 "
+ ((da < Math.PI) ? "0" : "1") + ",0 "
+ r0 * c0 + "," + r0 * s0 + "Z";
}
function ascending(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
}
function descending(a, b) {
return a < b ? 1 : a > b ? -1 : 0;
}
</script>
</body>
</html>

Просмотреть файл

@ -1 +1 @@
d3 = {version: "1.1.0"}; // semver
d3 = {version: "1.2.0"}; // semver

Просмотреть файл

@ -100,6 +100,18 @@ function d3_selection(groups) {
return d3_selection(subgroups);
};
groups.map = function(map) {
var group,
node;
for (var j = 0, m = groups.length; j < m; j++) {
group = groups[j];
for (var i = 0, n = group.length; i < n; i++) {
if (node = group[i]) node.__data__ = map.call(node, node.__data__, i);
}
}
return groups;
};
// TODO data(null) for clearing data?
groups.data = function(data, join) {
var enter = [],

Просмотреть файл

@ -61,18 +61,18 @@ d3.layout.chord = function() {
dj = subgroupIndex[i][j],
v = matrix[di][dj];
subgroups[di + "-" + dj] = {
"index": di,
"subindex": dj,
"startAngle": x,
"endAngle": x += v * k,
"value": v
index: di,
subindex: dj,
startAngle: x,
endAngle: x += v * k,
value: v
};
}
groups.push({
"index": di,
"startAngle": x0,
"endAngle": x,
"value": (x - x0) / k
index: di,
startAngle: x0,
endAngle: x,
value: (x - x0) / k
});
x += padding;
}
@ -84,8 +84,8 @@ d3.layout.chord = function() {
target = subgroups[j + "-" + i];
if (source.value || target.value) {
chords.push({
"source": source,
"target": target
source: source,
target: target
})
}
}

86
src/layout/pie.js Normal file
Просмотреть файл

@ -0,0 +1,86 @@
d3.layout.pie = function() {
var value = Number,
sort = null,
startAngle = 0,
endAngle = 2 * Math.PI;
function pie(data, i) {
// Compute the start angle.
var a = +(typeof startAngle == "function"
? startAngle.apply(this, arguments)
: startAngle);
// Compute the angular range (end - start).
var k = (typeof endAngle == "function"
? endAngle.apply(this, arguments)
: endAngle) - startAngle;
// Optionally sort (a copy of) the data.
if (sort != null) data = data.slice().sort(sort);
// Compute the numeric values for each data element.
var values = data.map(value);
// Convert k into a scale factor from value to angle, using the sum.
k /= values.reduce(function(p, d) { return p + d; }, 0);
// Compute the arcs!
return values.map(function(d, i) {
return {
value: d,
startAngle: a,
endAngle: a += d * k
};
});
}
/**
* Specifies the value function *x*, which returns a nonnegative numeric value
* for each datum. The default value function is `Number`. The value function
* is passed two arguments: the current datum and the current index.
*/
pie.value = function(x) {
if (!arguments.length) return value;
value = x;
return pie;
};
/**
* Specifies a sort comparison operator *x*. The comparator is passed two data
* elements from the data array, a and b; it returns a negative value if a is
* less than b, a positive value if a is greater than b, and zero if a equals
* b.
*/
pie.sort = function(x) {
if (!arguments.length) return sort;
sort = x;
return pie;
};
/**
* Specifies the overall start angle of the pie chart. Defaults to 0. The
* start angle can be specified either as a constant or as a function; in the
* case of a function, it is evaluated once per array (as opposed to per
* element).
*/
pie.startAngle = function(x) {
if (!arguments.length) return startAngle;
startAngle = x;
return pie;
};
/**
* Specifies the overall end angle of the pie chart. Defaults to 2π. The
* end angle can be specified either as a constant or as a function; in the
* case of a function, it is evaluated once per array (as opposed to per
* element).
*/
pie.endAngle = function(x) {
if (!arguments.length) return endAngle;
endAngle = x;
return pie;
};
return pie;
};

Просмотреть файл

@ -4,11 +4,11 @@ d3.svg.arc = function() {
startAngle = d3_svg_arcStartAngle,
endAngle = d3_svg_arcEndAngle;
function arc(d, i) {
var r0 = innerRadius.call(this, d, i),
r1 = outerRadius.call(this, d, i),
a0 = startAngle.call(this, d, i) + d3_svg_arcOffset,
a1 = endAngle.call(this, d, i) + d3_svg_arcOffset,
function arc() {
var r0 = innerRadius.apply(this, arguments),
r1 = outerRadius.apply(this, arguments),
a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset,
a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset,
da = a1 - a0,
df = da < Math.PI ? "0" : "1",
c0 = Math.cos(a0),
@ -64,6 +64,14 @@ d3.svg.arc = function() {
return arc;
};
arc.centroid = function() {
var r = (innerRadius.apply(this, arguments)
+ outerRadius.apply(this, arguments)) / 2,
a = (startAngle.apply(this, arguments)
+ endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
return [Math.cos(a) * r, Math.sin(a) * r];
};
return arc;
};