Skip to content

Instantly share code, notes, and snippets.

@kgryte
Last active April 13, 2018 20:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kgryte/5932401 to your computer and use it in GitHub Desktop.
Save kgryte/5932401 to your computer and use it in GitHub Desktop.
Nightingale and the Crimean War + D3.js

Nightingale and the Crimean War

D3.js visualizations of data from Florence Nightingale's "A contribution to the sanitary history of the British army during the late war with Russia".

Several works served as inspiration:

Note that the data used by Bostock is not correct, as documented elsewhere.

d3=function(){function n(n){return null!=n&&!isNaN(n)}function t(n){return n.length}function e(n){for(var t=1;n*t%1;)t*=10;return t}function r(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function i(){}function u(){}function a(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function o(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=Na.length;r>e;++e){var i=Na[e]+t;if(i in n)return i}}function c(n){for(var t=-1,e=n.length,r=[];++t<e;)r.push(n[t]);return r}function l(n){return Array.prototype.slice.call(n)}function s(){}function f(){}function h(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new i;return t.on=function(t,i){var u,a=r.get(t);return arguments.length<2?a&&a.on:(a&&(a.on=null,e=e.slice(0,u=e.indexOf(a)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function g(){ya.event.preventDefault()}function p(){for(var n,t=ya.event;n=t.sourceEvent;)t=n;return t}function d(n){for(var t=new f,e=0,r=arguments.length;++e<r;)t[arguments[e]]=h(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ya.event;i.target=n,ya.event=i,t[i.type].apply(e,r)}finally{ya.event=u}}},t}function m(n){return za(n,Fa),n}function v(n){return"function"==typeof n?n:function(){return Da(n,this)}}function y(n){return"function"==typeof n?n:function(){return ja(n,this)}}function M(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ya.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?o:a:n.local?u:i}function x(n){return n.trim().replace(/\s+/g," ")}function b(n){return new RegExp("(?:^|\\s+)"+ya.requote(n)+"(?:\\s+|$)","g")}function _(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=n.trim().split(/\s+/).map(w);var i=n.length;return"function"==typeof t?r:e}function w(n){var t=b(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",x(i+" "+n))):e.setAttribute("class",x(i.replace(t," ")))}}function S(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function E(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function k(n){return"function"==typeof n?n:(n=ya.ns.qualify(n)).local?function(){return Ma.createElementNS(n.space,n.local)}:function(){return Ma.createElementNS(this.namespaceURI,n)}}function A(n){return{__data__:n}}function N(n){return function(){return Ha(this,n)}}function q(n){return arguments.length||(n=ya.ascending),function(t,e){return!t-!e||n(t.__data__,e.__data__)}}function T(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],a=0,o=u.length;o>a;a++)(i=u[a])&&t(i,a,e);return n}function C(n){return za(n,Oa),n}function z(n,t,e){function r(){var t=this[a];t&&(this.removeEventListener(n,t,t.$),delete this[a])}function i(){var i=c(t,qa(arguments));r.call(this),this.addEventListener(n,this[a]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ya.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var a="__on"+n,o=n.indexOf("."),c=D;o>0&&(n=n.substring(0,o));var l=Ra.get(n);return l&&(n=l,c=j),o?t?i:r:t?s:u}function D(n,t){return function(e){var r=ya.event;ya.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ya.event=r}}}function j(n,t){var e=D(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function L(n){var t="selectstart."+n,e="dragstart."+n,r="click."+n,i=ya.select(ba).on(t,g).on(e,g),u=xa.style,a=u[Ua];return u[Ua]="none",function(n){function o(){i.on(r,null)}i.on(t,null).on(e,null),u[Ua]=a,n&&(i.on(r,function(){g(),o()},!0),setTimeout(o,0))}}function H(n,t){var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>Ia&&(ba.scrollX||ba.scrollY)){e=ya.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var i=e[0][0].getScreenCTM();Ia=!(i.f||i.e),e.remove()}return Ia?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var u=n.getBoundingClientRect();return[t.clientX-u.left-n.clientLeft,t.clientY-u.top-n.clientTop]}function F(){}function P(n,t,e){return new O(n,t,e)}function O(n,t,e){this.h=n,this.s=t,this.l=e}function Y(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(a-u)*n/60:180>n?a:240>n?u+(a-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,a;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,a=.5>=e?e*(1+t):e+t-e*t,u=2*e-a,rt(i(n+120),i(n),i(n-120))}function R(n){return n>0?1:0>n?-1:0}function U(n){return n>1?0:-1>n?$a:Math.acos(n)}function I(n){return n>1?$a/2:-1>n?-$a/2:Math.asin(n)}function V(n){return(Math.exp(n)-Math.exp(-n))/2}function X(n){return(Math.exp(n)+Math.exp(-n))/2}function Z(n){return(n=Math.sin(n/2))*n}function B(n,t,e){return new $(n,t,e)}function $(n,t,e){this.h=n,this.c=t,this.l=e}function W(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),J(e,Math.cos(n*=Ga)*t,Math.sin(n)*t)}function J(n,t,e){return new G(n,t,e)}function G(n,t,e){this.l=n,this.a=t,this.b=e}function K(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=nt(i)*to,r=nt(r)*eo,u=nt(u)*ro,rt(et(3.2404542*i-1.5371385*r-.4985314*u),et(-.969266*i+1.8760108*r+.041556*u),et(.0556434*i-.2040259*r+1.0572252*u))}function Q(n,t,e){return n>0?B(Math.atan2(e,t)*Ka,Math.sqrt(t*t+e*e),n):B(0/0,0/0,n)}function nt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function tt(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function et(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function rt(n,t,e){return new it(n,t,e)}function it(n,t,e){this.r=n,this.g=t,this.b=e}function ut(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function at(n,t,e){var r,i,u,a=0,o=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(st(i[0]),st(i[1]),st(i[2]))}return(u=ao.get(n))?t(u.r,u.g,u.b):(null!=n&&"#"===n.charAt(0)&&(4===n.length?(a=n.charAt(1),a+=a,o=n.charAt(2),o+=o,c=n.charAt(3),c+=c):7===n.length&&(a=n.substring(1,3),o=n.substring(3,5),c=n.substring(5,7)),a=parseInt(a,16),o=parseInt(o,16),c=parseInt(c,16)),t(a,o,c))}function ot(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),a=Math.max(n,t,e),o=a-u,c=(a+u)/2;return o?(i=.5>c?o/(a+u):o/(2-a-u),r=n==a?(t-e)/o+(e>t?6:0):t==a?(e-n)/o+2:(n-t)/o+4,r*=60):(r=0/0,i=c>0&&1>c?0:r),P(r,i,c)}function ct(n,t,e){n=lt(n),t=lt(t),e=lt(e);var r=tt((.4124564*n+.3575761*t+.1804375*e)/to),i=tt((.2126729*n+.7151522*t+.072175*e)/eo),u=tt((.0193339*n+.119192*t+.9503041*e)/ro);return J(116*i-16,500*(r-i),200*(i-u))}function lt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function st(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function ft(n){return"function"==typeof n?n:function(){return n}}function ht(n){return n}function gt(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),pt(t,e,n,r)}}function pt(n,t,e,r){function i(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(u,c)}catch(r){return a.error.call(u,r),void 0}a.load.call(u,n)}else a.error.call(u,c)}var u={},a=ya.dispatch("progress","load","error"),o={},c=new XMLHttpRequest,l=null;return!ba.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=i:c.onreadystatechange=function(){c.readyState>3&&i()},c.onprogress=function(n){var t=ya.event;ya.event=n;try{a.progress.call(u,c)}finally{ya.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?o[n]:(null==t?delete o[n]:o[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(l=n,u):l},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(qa(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),c.open(e,n,!0),null==t||"accept"in o||(o.accept=t+",*/*"),c.setRequestHeader)for(var a in o)c.setRequestHeader(a,o[a]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),c.send(null==r?null:r),u},u.abort=function(){return c.abort(),u},ya.rebind(u,a,"on"),null==r?u:u.get(dt(r))}function dt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function mt(){var n=vt(),t=yt()-n;t>24?(isFinite(t)&&(clearTimeout(so),so=setTimeout(mt,t)),lo=0):(lo=1,fo(mt))}function vt(){for(var n=Date.now(),t=oo;t;)n>=t.time&&(t.flush=t.callback(n-t.time)),t=t.next;return n}function yt(){for(var n,t=oo,e=1/0;t;)t.flush?t=n?n.next=t.next:oo=t.next:(t.time<e&&(e=t.time),t=(n=t).next);return co=n,e}function Mt(n,t){var e=Math.pow(10,3*Math.abs(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function xt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function bt(n){return n+""}function _t(){}function wt(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function St(n,t){n&&wo.hasOwnProperty(n.type)&&wo[n.type](n,t)}function Et(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1]);t.lineEnd()}function kt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)Et(n[e],t,1);t.polygonEnd()}function At(){function n(n,t){n*=Ga,t=t*Ga/2+$a/4;var e=n-r,a=Math.cos(t),o=Math.sin(t),c=u*o,l=i*a+c*Math.cos(e),s=c*Math.sin(e);Eo.add(Math.atan2(s,l)),r=n,i=a,u=o}var t,e,r,i,u;ko.point=function(a,o){ko.point=n,r=(t=a)*Ga,i=Math.cos(o=(e=o)*Ga/2+$a/4),u=Math.sin(o)},ko.lineEnd=function(){n(t,e)}}function Nt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function qt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function Tt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Ct(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function zt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function Dt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function jt(n){return[Math.atan2(n[1],n[0]),I(n[2])]}function Lt(n,t){return Math.abs(n[0]-t[0])<Wa&&Math.abs(n[1]-t[1])<Wa}function Ht(n,t){n*=Ga;var e=Math.cos(t*=Ga);Ft(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function Ft(n,t,e){++Ao,qo+=(n-qo)/Ao,To+=(t-To)/Ao,Co+=(e-Co)/Ao}function Pt(){function n(n,i){n*=Ga;var u=Math.cos(i*=Ga),a=u*Math.cos(n),o=u*Math.sin(n),c=Math.sin(i),l=Math.atan2(Math.sqrt((l=e*c-r*o)*l+(l=r*a-t*c)*l+(l=t*o-e*a)*l),t*a+e*o+r*c);No+=l,zo+=l*(t+(t=a)),Do+=l*(e+(e=o)),jo+=l*(r+(r=c)),Ft(t,e,r)}var t,e,r;Po.point=function(i,u){i*=Ga;var a=Math.cos(u*=Ga);t=a*Math.cos(i),e=a*Math.sin(i),r=Math.sin(u),Po.point=n,Ft(t,e,r)}}function Ot(){Po.point=Ht}function Yt(){function n(n,t){n*=Ga;var e=Math.cos(t*=Ga),a=e*Math.cos(n),o=e*Math.sin(n),c=Math.sin(t),l=i*c-u*o,s=u*a-r*c,f=r*o-i*a,h=Math.sqrt(l*l+s*s+f*f),g=r*a+i*o+u*c,p=h&&-U(g)/h,d=Math.atan2(h,g);Lo+=p*l,Ho+=p*s,Fo+=p*f,No+=d,zo+=d*(r+(r=a)),Do+=d*(i+(i=o)),jo+=d*(u+(u=c)),Ft(r,i,u)}var t,e,r,i,u;Po.point=function(a,o){t=a,e=o,Po.point=n,a*=Ga;var c=Math.cos(o*=Ga);r=c*Math.cos(a),i=c*Math.sin(a),u=Math.sin(o),Ft(r,i,u)},Po.lineEnd=function(){n(t,e),Po.lineEnd=Ot,Po.point=Ht}}function Rt(){return!0}function Ut(n,t,e,r,i){var u=[],a=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(Lt(e,r)){i.lineStart();for(var o=0;t>o;++o)i.point((e=n[o])[0],e[1]);return i.lineEnd(),void 0}var c={point:e,points:n,other:null,visited:!1,entry:!0,subject:!0},l={point:e,points:[e],other:c,visited:!1,entry:!1,subject:!1};c.other=l,u.push(c),a.push(l),c={point:r,points:[r],other:null,visited:!1,entry:!1,subject:!0},l={point:r,points:[r],other:c,visited:!1,entry:!0,subject:!1},c.other=l,u.push(c),a.push(l)}}),a.sort(t),It(u),It(a),u.length){if(e)for(var o=1,c=!e(a[0].point),l=a.length;l>o;++o)a[o].entry=c=!c;for(var s,f,h,g=u[0];;){for(s=g;s.visited;)if((s=s.next)===g)return;f=s.points,i.lineStart();do{if(s.visited=s.other.visited=!0,s.entry){if(s.subject)for(var o=0;o<f.length;o++)i.point((h=f[o])[0],h[1]);else r(s.point,s.next.point,1,i);s=s.next}else{if(s.subject){f=s.prev.points;for(var o=f.length;--o>=0;)i.point((h=f[o])[0],h[1])}else r(s.point,s.prev.point,-1,i);s=s.prev}s=s.other,f=s.points}while(!s.visited);i.lineEnd()}}}function It(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.next=e=n[r],e.prev=i,i=e;i.next=e=n[0],e.prev=i}}function Vt(n,t,e,r){return function(i){function u(t,e){n(t,e)&&i.point(t,e)}function a(n,t){d.point(n,t)}function o(){m.point=a,d.lineStart()}function c(){m.point=u,d.lineEnd()}function l(n,t){y.point(n,t),p.push([n,t])}function s(){y.lineStart(),p=[]}function f(){l(p[0][0],p[0][1]),y.lineEnd();var n,t=y.clean(),e=v.buffer(),r=e.length;if(p.pop(),g.push(p),p=null,r){if(1&t){n=e[0];var u,r=n.length-1,a=-1;for(i.lineStart();++a<r;)i.point((u=n[a])[0],u[1]);return i.lineEnd(),void 0}r>1&&2&t&&e.push(e.pop().concat(e.shift())),h.push(e.filter(Xt))}}var h,g,p,d=t(i),m={point:u,lineStart:o,lineEnd:c,polygonStart:function(){m.point=l,m.lineStart=s,m.lineEnd=f,h=[],g=[],i.polygonStart()},polygonEnd:function(){m.point=u,m.lineStart=o,m.lineEnd=c,h=ya.merge(h),h.length?Ut(h,Bt,null,e,i):r(g)&&(i.lineStart(),e(null,null,1,i),i.lineEnd()),i.polygonEnd(),h=g=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},v=Zt(),y=t(v);return m}}function Xt(n){return n.length>1}function Zt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:s,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Bt(n,t){return((n=n.point)[0]<0?n[1]-$a/2-Wa:$a/2-n[1])-((t=t.point)[0]<0?t[1]-$a/2-Wa:$a/2-t[1])}function $t(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,a=!1,o=!1,c=0;Eo.reset();for(var l=0,s=t.length;s>l;++l){var f=t[l],h=f.length;if(h){for(var g=f[0],p=g[0],d=g[1]/2+$a/4,m=Math.sin(d),v=Math.cos(d),y=1;;){y===h&&(y=0),n=f[y];var M=n[0],x=n[1]/2+$a/4,b=Math.sin(x),_=Math.cos(x),w=M-p,S=Math.abs(w)>$a,E=m*b;if(Eo.add(Math.atan2(E*Math.sin(w),v*_+E*Math.cos(w))),Math.abs(x)<Wa&&(o=!0),u+=S?w+(w>=0?2:-2)*$a:w,S^p>=e^M>=e){var k=Tt(Nt(g),Nt(n));Dt(k);var A=Tt(i,k);Dt(A);var N=(S^w>=0?-1:1)*I(A[2]);r>N&&(c+=S^w>=0?1:-1)}if(!y++)break;p=M,m=b,v=_,g=n}Math.abs(u)>Wa&&(a=!0)}}return(!o&&!a&&0>Eo||-Wa>u)^1&c}function Wt(n){var t,e=0/0,r=0/0,i=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(u,a){var o=u>0?$a:-$a,c=Math.abs(u-e);Math.abs(c-$a)<Wa?(n.point(e,r=(r+a)/2>0?$a/2:-$a/2),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(o,r),n.point(u,r),t=0):i!==o&&c>=$a&&(Math.abs(e-i)<Wa&&(e-=i*Wa),Math.abs(u-o)<Wa&&(u-=o*Wa),r=Jt(e,r,u,a),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(o,r),t=0),n.point(e=u,r=a),i=o},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function Jt(n,t,e,r){var i,u,a=Math.sin(n-e);return Math.abs(a)>Wa?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*a)):(t+r)/2}function Gt(n,t,e,r){var i;if(null==n)i=e*$a/2,r.point(-$a,i),r.point(0,i),r.point($a,i),r.point($a,0),r.point($a,-i),r.point(0,-i),r.point(-$a,-i),r.point(-$a,0),r.point(-$a,i);else if(Math.abs(n[0]-t[0])>Wa){var u=(n[0]<t[0]?1:-1)*$a;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Kt(n){return $t(Yo,n)}function Qt(n){function t(n,t){return Math.cos(n)*Math.cos(t)>a}function e(n){var e,u,a,c,s;return{lineStart:function(){c=a=!1,s=1},point:function(f,h){var g,p=[f,h],d=t(f,h),m=o?d?0:i(f,h):d?i(f+(0>f?$a:-$a),h):0;if(!e&&(c=a=d)&&n.lineStart(),d!==a&&(g=r(e,p),(Lt(e,g)||Lt(p,g))&&(p[0]+=Wa,p[1]+=Wa,d=t(p[0],p[1]))),d!==a)s=0,d?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(l&&e&&o^d){var v;m&u||!(v=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(v[0][0],v[0][1]),n.point(v[1][0],v[1][1]),n.lineEnd()):(n.point(v[1][0],v[1][1]),n.lineEnd(),n.lineStart(),n.point(v[0][0],v[0][1])))}!d||e&&Lt(e,p)||n.point(p[0],p[1]),e=p,a=d,u=m},lineEnd:function(){a&&n.lineEnd(),e=null},clean:function(){return s|(c&&a)<<1}}}function r(n,t,e){var r=Nt(n),i=Nt(t),u=[1,0,0],o=Tt(r,i),c=qt(o,o),l=o[0],s=c-l*l;if(!s)return!e&&n;var f=a*c/s,h=-a*l/s,g=Tt(u,o),p=zt(u,f),d=zt(o,h);Ct(p,d);var m=g,v=qt(p,m),y=qt(m,m),M=v*v-y*(qt(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=zt(m,(-v-x)/y);if(Ct(b,p),b=jt(b),!e)return b;var _,w=n[0],S=t[0],E=n[1],k=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=Math.abs(A-$a)<Wa,q=N||Wa>A;if(!N&&E>k&&(_=E,E=k,k=_),q?N?E+k>0^b[1]<(Math.abs(b[0]-w)<Wa?E:k):E<=b[1]&&b[1]<=k:A>$a^(w<=b[0]&&b[0]<=S)){var T=zt(m,(-v+x)/y);return Ct(T,p),[b,jt(T)]}}}function i(t,e){var r=o?n:$a-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}function u(n){return $t(c,n)}var a=Math.cos(n),o=a>0,c=[n,0],l=Math.abs(a)>Wa,s=Se(n,6*Ga);return Vt(t,e,s,u)}function ne(n,t,e,r){function i(r,i){return Math.abs(r[0]-n)<Wa?i>0?0:3:Math.abs(r[0]-e)<Wa?i>0?2:1:Math.abs(r[1]-t)<Wa?i>0?1:0:i>0?3:2}function u(n,t){return a(n.point,t.point)}function a(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}function o(i,u){var a=u[0]-i[0],o=u[1]-i[1],c=[0,1];return Math.abs(a)<Wa&&Math.abs(o)<Wa?n<=i[0]&&i[0]<=e&&t<=i[1]&&i[1]<=r:te(n-i[0],a,c)&&te(i[0]-e,-a,c)&&te(t-i[1],o,c)&&te(i[1]-r,-o,c)?(c[1]<1&&(u[0]=i[0]+c[1]*a,u[1]=i[1]+c[1]*o),c[0]>0&&(i[0]+=c[0]*a,i[1]+=c[0]*o),!0):!1}return function(c){function l(u){var a=i(u,-1),o=s([0===a||3===a?n:e,a>1?r:t]);return o}function s(n){for(var t=0,e=M.length,r=n[1],i=0;e>i;++i)for(var u,a=1,o=M[i],c=o.length,l=o[0];c>a;++a)u=o[a],l[1]<=r?u[1]>r&&f(l,u,n)>0&&++t:u[1]<=r&&f(l,u,n)<0&&--t,l=u;return 0!==t}function f(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(e[0]-n[0])*(t[1]-n[1])}function h(u,o,c,l){var s=0,f=0;if(null==u||(s=i(u,c))!==(f=i(o,c))||a(u,o)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(o[0],o[1])}function g(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function p(n,t){g(n,t)&&c.point(n,t)}function d(){T.point=v,M&&M.push(x=[]),A=!0,k=!1,S=E=0/0}function m(){y&&(v(b,_),w&&k&&q.rejoin(),y.push(q.buffer())),T.point=p,k&&c.lineEnd()}function v(n,t){n=Math.max(-Ro,Math.min(Ro,n)),t=Math.max(-Ro,Math.min(Ro,t));var e=g(n,t);if(M&&x.push([n,t]),A)b=n,_=t,w=e,A=!1,e&&(c.lineStart(),c.point(n,t));else if(e&&k)c.point(n,t);else{var r=[S,E],i=[n,t];o(r,i)?(k||(c.lineStart(),c.point(r[0],r[1])),c.point(i[0],i[1]),e||c.lineEnd()):e&&(c.lineStart(),c.point(n,t))}S=n,E=t,k=e}var y,M,x,b,_,w,S,E,k,A,N=c,q=Zt(),T={point:p,lineStart:d,lineEnd:m,polygonStart:function(){c=q,y=[],M=[]},polygonEnd:function(){c=N,(y=ya.merge(y)).length?(c.polygonStart(),Ut(y,u,l,h,c),c.polygonEnd()):s([n,t])&&(c.polygonStart(),c.lineStart(),h(null,null,1,c),c.lineEnd(),c.polygonEnd()),y=M=x=null}};return T}}function te(n,t,e){if(Math.abs(t)<Wa)return 0>=n;var r=n/t;if(t>0){if(r>e[1])return!1;r>e[0]&&(e[0]=r)}else{if(r<e[0])return!1;r<e[1]&&(e[1]=r)}return!0}function ee(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function re(n){var t=0,e=$a/3,r=ve(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*$a/180,e=n[1]*$a/180):[180*(t/$a),180*(e/$a)]},i}function ie(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),a-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),a=Math.sqrt(u)/i;return e.invert=function(n,t){var e=a-t;return[Math.atan2(n,e)/i,I((u-(n*n+e*e)*i*i)/(2*i))]},e}function ue(){function n(n,t){Io+=i*n-r*t,r=n,i=t}var t,e,r,i;$o.point=function(u,a){$o.point=n,t=r=u,e=i=a},$o.lineEnd=function(){n(t,e)}}function ae(n,t){Vo>n&&(Vo=n),n>Zo&&(Zo=n),Xo>t&&(Xo=t),t>Bo&&(Bo=t)}function oe(){function n(n,t){a.push("M",n,",",t,u)}function t(n,t){a.push("M",n,",",t),o.point=e}function e(n,t){a.push("L",n,",",t)}function r(){o.point=n}function i(){a.push("Z")}var u=ce(4.5),a=[],o={point:n,lineStart:function(){o.point=t},lineEnd:r,polygonStart:function(){o.lineEnd=i},polygonEnd:function(){o.lineEnd=r,o.point=n},pointRadius:function(n){return u=ce(n),o},result:function(){if(a.length){var n=a.join("");return a=[],n}}};return o}function ce(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function le(n,t){qo+=n,To+=t,++Co}function se(){function n(n,r){var i=n-t,u=r-e,a=Math.sqrt(i*i+u*u);zo+=a*(t+n)/2,Do+=a*(e+r)/2,jo+=a,le(t=n,e=r)}var t,e;Jo.point=function(r,i){Jo.point=n,le(t=r,e=i)}}function fe(){Jo.point=le}function he(){function n(n,t){var e=n-r,u=t-i,a=Math.sqrt(e*e+u*u);zo+=a*(r+n)/2,Do+=a*(i+t)/2,jo+=a,a=i*n-r*t,Lo+=a*(r+n),Ho+=a*(i+t),Fo+=3*a,le(r=n,i=t)}var t,e,r,i;Jo.point=function(u,a){Jo.point=n,le(t=r=u,e=i=a)},Jo.lineEnd=function(){n(t,e)}}function ge(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,a,0,2*$a)}function e(t,e){n.moveTo(t,e),o.point=r}function r(t,e){n.lineTo(t,e)}function i(){o.point=t}function u(){n.closePath()}var a=4.5,o={point:t,lineStart:function(){o.point=e},lineEnd:i,polygonStart:function(){o.lineEnd=u},polygonEnd:function(){o.lineEnd=i,o.point=t},pointRadius:function(n){return a=n,o},result:s};return o}function pe(n){function t(t){function r(e,r){e=n(e,r),t.point(e[0],e[1])}function i(){M=0/0,S.point=a,t.lineStart()}function a(r,i){var a=Nt([r,i]),o=n(r,i);e(M,x,y,b,_,w,M=o[0],x=o[1],y=r,b=a[0],_=a[1],w=a[2],u,t),t.point(M,x)}function o(){S.point=r,t.lineEnd()}function c(){i(),S.point=l,S.lineEnd=s}function l(n,t){a(f=n,h=t),g=M,p=x,d=b,m=_,v=w,S.point=a}function s(){e(M,x,y,b,_,w,g,p,f,d,m,v,u,t),S.lineEnd=o,o()}var f,h,g,p,d,m,v,y,M,x,b,_,w,S={point:r,lineStart:i,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=i}};return S}function e(t,u,a,o,c,l,s,f,h,g,p,d,m,v){var y=s-t,M=f-u,x=y*y+M*M;if(x>4*r&&m--){var b=o+g,_=c+p,w=l+d,S=Math.sqrt(b*b+_*_+w*w),E=Math.asin(w/=S),k=Math.abs(Math.abs(w)-1)<Wa?(a+h)/2:Math.atan2(_,b),A=n(k,E),N=A[0],q=A[1],T=N-t,C=q-u,z=M*T-y*C;(z*z/x>r||Math.abs((y*T+M*C)/x-.5)>.3||i>o*g+c*p+l*d)&&(e(t,u,a,o,c,l,N,q,k,b/=S,_/=S,w,m,v),v.point(N,q),e(N,q,k,b,_,w,s,f,h,g,p,d,m,v))}}var r=.5,i=Math.cos(30*Ga),u=16;return t.precision=function(n){return arguments.length?(u=(r=n*n)>0&&16,t):Math.sqrt(r)},t}function de(n){var t=pe(function(t,e){return n([t*Ka,e*Ka])});return function(n){return n=t(n),{point:function(t,e){n.point(t*Ga,e*Ga)},sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}}function me(n){return ve(function(){return n})()}function ve(n){function t(n){return n=o(n[0]*Ga,n[1]*Ga),[n[0]*h+c,l-n[1]*h]}function e(n){return n=o.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*Ka,n[1]*Ka]}function r(){o=ee(a=xe(v,y,M),u);var n=u(d,m);return c=g-n[0]*h,l=p+n[1]*h,i()}function i(){return s&&(s.valid=!1,s=null),t}var u,a,o,c,l,s,f=pe(function(n,t){return n=u(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,d=0,m=0,v=0,y=0,M=0,x=Oo,b=ht,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=ye(a,x(f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Oo):Qt((_=+n)*Ga),i()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=null==n?ht:ne(n[0][0],n[0][1],n[1][0],n[1][1]),i()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(d=n[0]%360*Ga,m=n[1]%360*Ga,r()):[d*Ka,m*Ka]},t.rotate=function(n){return arguments.length?(v=n[0]%360*Ga,y=n[1]%360*Ga,M=n.length>2?n[2]%360*Ga:0,r()):[v*Ka,y*Ka,M*Ka]},ya.rebind(t,f,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function ye(n,t){return{point:function(e,r){r=n(e*Ga,r*Ga),e=r[0],t.point(e>$a?e-2*$a:-$a>e?e+2*$a:e,r[1])},sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Me(n,t){return[n,t]}function xe(n,t,e){return n?t||e?ee(_e(n),we(t,e)):_e(n):t||e?we(t,e):Me}function be(n){return function(t,e){return t+=n,[t>$a?t-2*$a:-$a>t?t+2*$a:t,e]}}function _e(n){var t=be(n);return t.invert=be(-n),t}function we(n,t){function e(n,t){var e=Math.cos(t),o=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+o*i;return[Math.atan2(c*u-s*a,o*r-l*i),I(s*u+c*a)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),a=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),o=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*u-c*a;return[Math.atan2(c*u+l*a,o*r+s*i),I(s*r-o*i)]},e}function Se(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,a,o){null!=i?(i=Ee(e,i),u=Ee(e,u),(a>0?u>i:i>u)&&(i+=2*a*$a)):(i=n+2*a*$a,u=n);for(var c,l=a*t,s=i;a>0?s>u:u>s;s-=l)o.point((c=jt([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],c[1])}}function Ee(n,t){var e=Nt(t);e[0]-=n,Dt(e);var r=U(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Wa)%(2*Math.PI)}function ke(n,t,e){var r=ya.range(n,t-Wa,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function Ae(n,t,e){var r=ya.range(n,t-Wa,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Ne(n){return n.source}function qe(n){return n.target}function Te(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),a=Math.cos(r),o=Math.sin(r),c=i*Math.cos(n),l=i*Math.sin(n),s=a*Math.cos(e),f=a*Math.sin(e),h=2*Math.asin(Math.sqrt(Z(r-t)+i*a*Z(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,i=e*l+t*f,a=e*u+t*o;return[Math.atan2(i,r)*Ka,Math.atan2(a,Math.sqrt(r*r+i*i))*Ka]}:function(){return[n*Ka,t*Ka]};return p.distance=h,p}function Ce(){function n(n,i){var u=Math.sin(i*=Ga),a=Math.cos(i),o=Math.abs((n*=Ga)-t),c=Math.cos(o);Go+=Math.atan2(Math.sqrt((o=a*Math.sin(o))*o+(o=r*u-e*a*c)*o),e*u+r*a*c),t=n,e=u,r=a}var t,e,r;Ko.point=function(i,u){t=i*Ga,e=Math.sin(u*=Ga),r=Math.cos(u),Ko.point=n},Ko.lineEnd=function(){Ko.point=Ko.lineEnd=s}}function ze(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),a=Math.cos(i);return[Math.atan2(n*u,r*a),Math.asin(r&&e*u/r)]},e}function De(n,t){function e(n,t){var e=Math.abs(Math.abs(t)-$a/2)<Wa?0:a/Math.pow(i(t),u);return[e*Math.sin(u*n),a-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan($a/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),a=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=a-t,r=R(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(a/r,1/u))-$a/2]},e):Le}function je(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return Math.abs(i)<Wa?Me:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-R(i)*Math.sqrt(n*n+e*e)]},e)}function Le(n,t){return[n,Math.log(Math.tan($a/4+t/2))]}function He(n){var t,e=me(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var a=u.apply(e,arguments);if(a===e){if(t=null==n){var o=$a*r(),c=i();u([[c[0]-o,c[1]-o],[c[0]+o,c[1]+o]])}}else t&&(a=null);return a},e.clipExtent(null)}function Fe(n,t){var e=Math.cos(t)*Math.sin(n);return[Math.log((1+e)/(1-e))/2,Math.atan2(Math.tan(t),Math.cos(n))]}function Pe(n){function t(t){function a(){l.push("M",u(n(s),o))}for(var c,l=[],s=[],f=-1,h=t.length,g=ft(e),p=ft(r);++f<h;)i.call(this,c=t[f],f)?s.push([+g.call(this,c,f),+p.call(this,c,f)]):s.length&&(a(),s=[]);return s.length&&a(),l.length?l.join(""):null}var e=Oe,r=Ye,i=Rt,u=Re,a=u.key,o=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(a="function"==typeof n?u=n:(u=ic.get(n)||Re).key,t):a},t.tension=function(n){return arguments.length?(o=n,t):o},t}function Oe(n){return n[0]}function Ye(n){return n[1]}function Re(n){return n.join("L")}function Ue(n){return Re(n)+"Z"}function Ie(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function Ve(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Xe(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function Ze(n,t){return n.length<4?Re(n):n[1]+We(n.slice(1,n.length-1),Je(n,t))}function Be(n,t){return n.length<3?Re(n):n[0]+We((n.push(n[0]),n),Je([n[n.length-2]].concat(n,[n[1]]),t))}function $e(n,t){return n.length<3?Re(n):n[0]+We(n,Je(n,t))}function We(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return Re(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],a=t[0],o=a,c=1;if(e&&(r+="Q"+(u[0]-2*a[0]/3)+","+(u[1]-2*a[1]/3)+","+u[0]+","+u[1],i=n[1],c=2),t.length>1){o=t[1],u=n[c],c++,r+="C"+(i[0]+a[0])+","+(i[1]+a[1])+","+(u[0]-o[0])+","+(u[1]-o[1])+","+u[0]+","+u[1];for(var l=2;l<t.length;l++,c++)u=n[c],o=t[l],r+="S"+(u[0]-o[0])+","+(u[1]-o[1])+","+u[0]+","+u[1]}if(e){var s=n[c];r+="Q"+(u[0]+2*o[0]/3)+","+(u[1]+2*o[1]/3)+","+s[0]+","+s[1]}return r}function Je(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],a=n[1],o=1,c=n.length;++o<c;)e=u,u=a,a=n[o],r.push([i*(a[0]-e[0]),i*(a[1]-e[1])]);return r}function Ge(n){if(n.length<3)return Re(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],a=[i,i,i,(r=n[1])[0]],o=[u,u,u,r[1]],c=[i,",",u];for(er(c,a,o);++t<e;)r=n[t],a.shift(),a.push(r[0]),o.shift(),o.push(r[1]),er(c,a,o);for(t=-1;++t<2;)a.shift(),a.push(r[0]),o.shift(),o.push(r[1]),er(c,a,o);return c.join("")}function Ke(n){if(n.length<4)return Re(n);for(var t,e=[],r=-1,i=n.length,u=[0],a=[0];++r<3;)t=n[r],u.push(t[0]),a.push(t[1]);for(e.push(tr(oc,u)+","+tr(oc,a)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),a.shift(),a.push(t[1]),er(e,u,a);return e.join("")}function Qe(n){for(var t,e,r=-1,i=n.length,u=i+4,a=[],o=[];++r<4;)e=n[r%i],a.push(e[0]),o.push(e[1]);for(t=[tr(oc,a),",",tr(oc,o)],--r;++r<u;)e=n[r%i],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),er(t,a,o);return t.join("")}function nr(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],a=n[0][1],o=n[e][0]-u,c=n[e][1]-a,l=-1;++l<=e;)r=n[l],i=l/e,r[0]=t*r[0]+(1-t)*(u+i*o),r[1]=t*r[1]+(1-t)*(a+i*c);return Ge(n)}function tr(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function er(n,t,e){n.push("C",tr(uc,t),",",tr(uc,e),",",tr(ac,t),",",tr(ac,e),",",tr(oc,t),",",tr(oc,e))}function rr(n,t){return(t[1]-n[1])/(t[0]-n[0])}function ir(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],a=r[0]=rr(i,u);++t<e;)r[t]=(a+(a=rr(i=u,u=n[t+1])))/2;return r[t]=a,r}function ur(n){for(var t,e,r,i,u=[],a=ir(n),o=-1,c=n.length-1;++o<c;)t=rr(n[o],n[o+1]),Math.abs(t)<1e-6?a[o]=a[o+1]=0:(e=a[o]/t,r=a[o+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),a[o]=i*e,a[o+1]=i*r));
for(o=-1;++o<=c;)i=(n[Math.min(c,o+1)][0]-n[Math.max(0,o-1)][0])/(6*(1+a[o]*a[o])),u.push([i||0,a[o]*i||0]);return u}function ar(n){return n.length<3?Re(n):n[0]+We(n,ur(n))}function or(n,t,e,r){var i,u,a,o,c,l,s;return i=r[n],u=i[0],a=i[1],i=r[t],o=i[0],c=i[1],i=r[e],l=i[0],s=i[1],(s-a)*(o-u)-(c-a)*(l-u)>0}function cr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function lr(n,t,e,r){var i=n[0],u=e[0],a=t[0]-i,o=r[0]-u,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(o*(c-l)-f*(i-u))/(f*a-o*s);return[i+h*a,c+h*s]}function sr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function fr(n,t){var e={list:n.map(function(n,t){return{index:t,x:n[0],y:n[1]}}).sort(function(n,t){return n.y<t.y?-1:n.y>t.y?1:n.x<t.x?-1:n.x>t.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,"l"),r.rightEnd=r.createHalfEdge(null,"l"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(n,t){return{edge:n,side:t,vertex:null,l:null,r:null}},insert:function(n,t){t.l=n,t.r=n.r,n.r.l=t,n.r=t},leftBound:function(n){var t=r.leftEnd;do t=t.r;while(t!=r.rightEnd&&i.rightOf(t,n));return t=t.l},del:function(n){n.l.r=n.r,n.r.l=n.l,n.edge=null},right:function(n){return n.r},left:function(n){return n.l},leftRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[n.side]},rightRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[lc[n.side]]}},i={bisect:function(n,t){var e={region:{l:n,r:t},ep:{l:null,r:null}},r=t.x-n.x,i=t.y-n.y,u=r>0?r:-r,a=i>0?i:-i;return e.c=n.x*r+n.y*i+.5*(r*r+i*i),u>a?(e.a=1,e.b=i/r,e.c/=r):(e.b=1,e.a=r/i,e.c/=i),e},intersect:function(n,t){var e=n.edge,r=t.edge;if(!e||!r||e.region.r==r.region.r)return null;var i=e.a*r.b-e.b*r.a;if(Math.abs(i)<1e-10)return null;var u,a,o=(e.c*r.b-r.c*e.b)/i,c=(r.c*e.a-e.c*r.a)/i,l=e.region.r,s=r.region.r;l.y<s.y||l.y==s.y&&l.x<s.x?(u=n,a=e):(u=t,a=r);var f=o>=a.region.r.x;return f&&"l"===u.side||!f&&"r"===u.side?null:{x:o,y:c}},rightOf:function(n,t){var e=n.edge,r=e.region.r,i=t.x>r.x;if(i&&"l"===n.side)return 1;if(!i&&"r"===n.side)return 0;if(1===e.a){var u=t.y-r.y,a=t.x-r.x,o=0,c=0;if(!i&&e.b<0||i&&e.b>=0?c=o=u>=e.b*a:(c=t.x+t.y*e.b>e.c,e.b<0&&(c=!c),c||(o=1)),!o){var l=r.x-e.region.l.x;c=e.b*(a*a-u*u)<l*u*(1+2*a/l+e.b*e.b),e.b<0&&(c=!c)}}else{var s=e.c-e.a*t.x,f=t.y-s,h=t.x-r.x,g=s-r.y;c=f*f>h*h+g*g}return"l"===n.side?c:!c},endPoint:function(n,e,r){n.ep[e]=r,n.ep[lc[e]]&&t(n)},distance:function(n,t){var e=n.x-t.x,r=n.y-t.y;return Math.sqrt(e*e+r*r)}},u={list:[],insert:function(n,t,e){n.vertex=t,n.ystar=t.y+e;for(var r=0,i=u.list,a=i.length;a>r;r++){var o=i[r];if(!(n.ystar>o.ystar||n.ystar==o.ystar&&t.x>o.vertex.x))break}i.splice(r,0,n)},del:function(n){for(var t=0,e=u.list,r=e.length;r>t&&e[t]!=n;++t);e.splice(t,1)},empty:function(){return 0===u.list.length},nextEvent:function(n){for(var t=0,e=u.list,r=e.length;r>t;++t)if(e[t]==n)return e[t+1];return null},min:function(){var n=u.list[0];return{x:n.vertex.x,y:n.ystar}},extractMin:function(){return u.list.shift()}};r.init(),e.bottomSite=e.list.shift();for(var a,o,c,l,s,f,h,g,p,d,m,v,y,M=e.list.shift();;)if(u.empty()||(a=u.min()),M&&(u.empty()||M.y<a.y||M.y==a.y&&M.x<a.x))o=r.leftBound(M),c=r.right(o),h=r.rightRegion(o),v=i.bisect(h,M),f=r.createHalfEdge(v,"l"),r.insert(o,f),d=i.intersect(o,f),d&&(u.del(o),u.insert(o,d,i.distance(d,M))),o=f,f=r.createHalfEdge(v,"r"),r.insert(o,f),d=i.intersect(f,c),d&&u.insert(f,d,i.distance(d,M)),M=e.list.shift();else{if(u.empty())break;o=u.extractMin(),l=r.left(o),c=r.right(o),s=r.right(c),h=r.leftRegion(o),g=r.rightRegion(c),m=o.vertex,i.endPoint(o.edge,o.side,m),i.endPoint(c.edge,c.side,m),r.del(o),u.del(c),r.del(c),y="l",h.y>g.y&&(p=h,h=g,g=p,y="r"),v=i.bisect(h,g),f=r.createHalfEdge(v,y),r.insert(l,f),i.endPoint(v,lc[y],m),d=i.intersect(l,f),d&&(u.del(l),u.insert(l,d,i.distance(d,h))),d=i.intersect(f,s),d&&u.insert(f,d,i.distance(d,h))}for(o=r.right(r.leftEnd);o!=r.rightEnd;o=r.right(o))t(o.edge)}function hr(n){return n.x}function gr(n){return n.y}function pr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function dr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var a=.5*(e+i),o=.5*(r+u),c=t.nodes;c[0]&&dr(n,c[0],e,r,a,o),c[1]&&dr(n,c[1],a,r,i,o),c[2]&&dr(n,c[2],e,o,a,u),c[3]&&dr(n,c[3],a,o,i,u)}}function mr(n,t){n=ya.rgb(n),t=ya.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,a=t.g-r,o=t.b-i;return function(n){return"#"+ut(Math.round(e+u*n))+ut(Math.round(r+a*n))+ut(Math.round(i+o*n))}}function vr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=xr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return t-=n=+n,function(e){return n+t*e}}function Mr(n,t){var e,r,i,u,a,o=0,c=0,l=[],s=[];for(n+="",t+="",sc.lastIndex=0,r=0;e=sc.exec(t);++r)e.index&&l.push(t.substring(o,c=e.index)),s.push({i:l.length,x:e[0]}),l.push(null),o=sc.lastIndex;for(o<t.length&&l.push(t.substring(o)),r=0,u=s.length;(e=sc.exec(n))&&u>r;++r)if(a=s[r],a.x==e[0]){if(a.i)if(null==l[a.i+1])for(l[a.i-1]+=a.x,l.splice(a.i,1),i=r+1;u>i;++i)s[i].i--;else for(l[a.i-1]+=a.x+l[a.i+1],l.splice(a.i,2),i=r+1;u>i;++i)s[i].i-=2;else if(null==l[a.i+1])l[a.i]=a.x;else for(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1),i=r+1;u>i;++i)s[i].i--;s.splice(r,1),u--,r--}else a.x=yr(parseFloat(e[0]),parseFloat(a.x));for(;u>r;)a=s.pop(),null==l[a.i+1]?l[a.i]=a.x:(l[a.i]=a.x+l[a.i+1],l.splice(a.i+1,1)),u--;return 1===l.length?null==l[0]?(a=s[0].x,function(n){return a(n)+""}):function(){return t}:function(n){for(r=0;u>r;++r)l[(a=s[r]).i]=a.x(n);return l.join("")}}function xr(n,t){for(var e,r=ya.interpolators.length;--r>=0&&!(e=ya.interpolators[r](n,t)););return e}function br(n,t){var e,r=[],i=[],u=n.length,a=t.length,o=Math.min(n.length,t.length);for(e=0;o>e;++e)r.push(xr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;a>e;++e)i[e]=t[e];return function(n){for(e=0;o>e;++e)i[e]=r[e](n);return i}}function _r(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function wr(n){return function(t){return 1-n(1-t)}}function Sr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Er(n){return n*n}function kr(n){return n*n*n}function Ar(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Nr(n){return function(t){return Math.pow(t,n)}}function qr(n){return 1-Math.cos(n*$a/2)}function Tr(n){return Math.pow(2,10*(n-1))}function Cr(n){return 1-Math.sqrt(1-n*n)}function zr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/(2*$a)*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,10*-r)*Math.sin(2*(r-e)*$a/t)}}function Dr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function jr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Lr(n,t){n=ya.hcl(n),t=ya.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,a=t.c-r,o=t.l-i;return isNaN(a)&&(a=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return W(e+u*n,r+a*n,i+o*n)+""}}function Hr(n,t){n=ya.hsl(n),t=ya.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,a=t.s-r,o=t.l-i;return isNaN(a)&&(a=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return Y(e+u*n,r+a*n,i+o*n)+""}}function Fr(n,t){n=ya.lab(n),t=ya.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,a=t.a-r,o=t.b-i;return function(n){return K(e+u*n,r+a*n,i+o*n)+""}}function Pr(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Or(n){var t=[n.a,n.b],e=[n.c,n.d],r=Rr(t),i=Yr(t,e),u=Rr(Ur(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Ka,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Ka:0}function Yr(n,t){return n[0]*t[0]+n[1]*t[1]}function Rr(n){var t=Math.sqrt(Yr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Ur(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n,t){var e,r=[],i=[],u=ya.transform(n),a=ya.transform(t),o=u.translate,c=a.translate,l=u.rotate,s=a.rotate,f=u.skew,h=a.skew,g=u.scale,p=a.scale;return o[0]!=c[0]||o[1]!=c[1]?(r.push("translate(",null,",",null,")"),i.push({i:1,x:yr(o[0],c[0])},{i:3,x:yr(o[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),l!=s?(l-s>180?s+=360:s-l>180&&(l+=360),i.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:yr(l,s)})):s&&r.push(r.pop()+"rotate("+s+")"),f!=h?i.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:yr(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),i.push({i:e-4,x:yr(g[0],p[0])},{i:e-2,x:yr(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=i.length,function(n){for(var t,u=-1;++u<e;)r[(t=i[u]).i]=t.x(n);return r.join("")}}function Vr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Xr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function Zr(n){for(var t=n.source,e=n.target,r=$r(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Br(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function $r(n,t){if(n===t)return n;for(var e=Br(n),r=Br(t),i=e.pop(),u=r.pop(),a=null;i===u;)a=i,i=e.pop(),u=r.pop();return a}function Wr(n){n.fixed|=2}function Jr(n){n.fixed&=-7}function Gr(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Kr(n){n.fixed&=-5}function Qr(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,a=n.nodes,o=a.length,c=-1;++c<o;)u=a[c],null!=u&&(Qr(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var l=t*e[n.point.index];n.charge+=n.pointCharge=l,r+=l*n.point.x,i+=l*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ni(n,t){return ya.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=ii,n}function ti(n){return n.children}function ei(n){return n.value}function ri(n,t){return t.value-n.value}function ii(n){return ya.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function ui(n){return n.x}function ai(n){return n.y}function oi(n,t,e){n.y0=t,n.y=e}function ci(n){return ya.range(n.length)}function li(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function si(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function fi(n){return n.reduce(hi,0)}function hi(n,t){return n+t[1]}function gi(n,t){return pi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function pi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function di(n){return[ya.min(n),ya.max(n)]}function mi(n,t){return n.parent==t.parent?1:2}function vi(n){var t=n.children;return t&&t.length?t[0]:n._tree.thread}function yi(n){var t,e=n.children;return e&&(t=e.length)?e[t-1]:n._tree.thread}function Mi(n,t){var e=n.children;if(e&&(i=e.length))for(var r,i,u=-1;++u<i;)t(r=Mi(e[u],t),n)>0&&(n=r);return n}function xi(n,t){return n.x-t.x}function bi(n,t){return t.x-n.x}function _i(n,t){return n.depth-t.depth}function wi(n,t){function e(n,r){var i=n.children;if(i&&(a=i.length))for(var u,a,o=null,c=-1;++c<a;)u=i[c],e(u,o),o=u;t(n,r)}e(n,null)}function Si(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u]._tree,t.prelim+=e,t.mod+=e,e+=t.shift+(r+=t.change)}function Ei(n,t,e){n=n._tree,t=t._tree;var r=e/(t.number-n.number);n.change+=r,t.change-=r,t.shift+=e,t.prelim+=e,t.mod+=e}function ki(n,t,e){return n._tree.ancestor.parent==t.parent?n._tree.ancestor:e}function Ai(n,t){return n.value-t.value}function Ni(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function qi(n,t){n._pack_next=t,t._pack_prev=n}function Ti(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ci(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,i,u,a,o,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(zi),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(i=e[1],i.x=i.r,i.y=0,t(i),l>2))for(u=e[2],Li(r,i,u),t(u),Ni(r,u),r._pack_prev=u,Ni(u,i),i=r._pack_next,a=3;l>a;a++){Li(r,i,u=e[a]);var p=0,d=1,m=1;for(o=i._pack_next;o!==i;o=o._pack_next,d++)if(Ti(o,u)){p=1;break}if(1==p)for(c=r._pack_prev;c!==o._pack_prev&&!Ti(c,u);c=c._pack_prev,m++);p?(m>d||d==m&&i.r<r.r?qi(r,i=o):qi(r=c,i),a--):(Ni(r,u),i=u,t(u))}var v=(s+f)/2,y=(h+g)/2,M=0;for(a=0;l>a;a++)u=e[a],u.x-=v,u.y-=y,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Di)}}function zi(n){n._pack_next=n._pack_prev=n}function Di(n){delete n._pack_next,delete n._pack_prev}function ji(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,a=i.length;++u<a;)ji(i[u],t,e,r)}function Li(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var a=t.r+e.r,o=i*i+u*u;a*=a,r*=r;var c=.5+(r-a)/(2*o),l=Math.sqrt(Math.max(0,2*a*(r+o)-(r-=o)*r-a*a))/(2*o);e.x=n.x+c*i+l*u,e.y=n.y+c*u-l*i}else e.x=n.x+r,e.y=n.y}function Hi(n){return 1+ya.max(n,function(n){return n.y})}function Fi(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Pi(n){var t=n.children;return t&&t.length?Pi(t[0]):n}function Oi(n){var t,e=n.children;return e&&(t=e.length)?Oi(e[t-1]):n}function Yi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ri(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Ui(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ii(n){return n.rangeExtent?n.rangeExtent():Ui(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],a=n[i];return u>a&&(e=r,r=i,i=e,e=u,u=a,a=e),n[r]=t.floor(u),n[i]=t.ceil(a),n}function Zi(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:xc}function Bi(n,t,e,r){var i=[],u=[],a=0,o=Math.min(n.length,t.length)-1;for(n[o]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++a<=o;)i.push(e(n[a-1],n[a])),u.push(r(t[a-1],t[a]));return function(t){var e=ya.bisect(n,t,1,o)-1;return u[e](i[e](t))}}function $i(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,c=r?Xr:Vr;return a=i(n,t,c,e),o=i(t,n,c,xr),u}function u(n){return a(n)}var a,o;return u.invert=function(n){return o(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Pr)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Ji(n,t),i()},u.copy=function(){return $i(n,t,e,r)},i()}function Wi(n,t){return ya.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Ji(n,t){return Xi(n,Zi(t?Ki(n,t)[2]:Gi(n)))}function Gi(n){var t=Ui(n),e=t[1]-t[0];return Math.pow(10,Math.round(Math.log(e)/Math.LN10)-1)}function Ki(n,t){var e=Ui(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ya.range.apply(ya,Ki(n,t))}function nu(n,t,e){var r=-Math.floor(Math.log(Ki(n,t)[2])/Math.LN10+.01);return ya.format(e?e.replace(vo,function(n,t,e,i,u,a,o,c,l,s){return[t,e,i,u,a,o,c,l||"."+(r-2*("%"===s)),s].join("")}):",."+r+"f")}function tu(n,t,e,r,i){function u(t){return n(e(t))}return u.invert=function(t){return r(n.invert(t))},u.domain=function(t){return arguments.length?(t[0]<0?(e=iu,r=uu):(e=eu,r=ru),n.domain((i=t.map(Number)).map(e)),u):i},u.base=function(n){return arguments.length?(t=+n,u):t},u.nice=function(){function r(n){return Math.pow(t,Math.floor(Math.log(n)/Math.log(t)))}function a(n){return Math.pow(t,Math.ceil(Math.log(n)/Math.log(t)))}return n.domain(Xi(i,e===eu?{floor:r,ceil:a}:{floor:function(n){return-a(-n)},ceil:function(n){return-r(-n)}}).map(e)),u},u.ticks=function(){var i=Ui(n.domain()),u=[];if(i.every(isFinite)){var a=Math.log(t),o=Math.floor(i[0]/a),c=Math.ceil(i[1]/a),l=r(i[0]),s=r(i[1]),f=t%1?2:t;if(e===iu)for(u.push(-Math.pow(t,-o));o++<c;)for(var h=f-1;h>0;h--)u.push(-Math.pow(t,-o)*h);else{for(;c>o;o++)for(var h=1;f>h;h++)u.push(Math.pow(t,o)*h);u.push(Math.pow(t,o))}for(o=0;u[o]<l;o++);for(c=u.length;u[c-1]>s;c--);u=u.slice(o,c)}return u},u.tickFormat=function(n,i){if(!arguments.length)return bc;arguments.length<2?i=bc:"function"!=typeof i&&(i=ya.format(i));var a,o=Math.log(t),c=Math.max(.1,n/u.ticks().length),l=e===iu?(a=-1e-12,Math.floor):(a=1e-12,Math.ceil);return function(n){return n/r(o*l(e(n)/o+a))<=c?i(n):""}},u.copy=function(){return tu(n.copy(),t,e,r,i)},Wi(u,n)}function eu(n){return Math.log(0>n?0:n)}function ru(n){return Math.exp(n)}function iu(n){return-Math.log(n>0?0:-n)}function uu(n){return-Math.exp(-n)}function au(n,t,e){function r(t){return n(i(t))}var i=ou(t),u=ou(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Ji(e,n))},r.exponent=function(a){return arguments.length?(i=ou(t=a),u=ou(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return au(n.copy(),t,e)},Wi(r,n)}function ou(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function cu(n,t){function e(t){return a[((u.get(t)||u.set(t,n.push(t)))-1)%a.length]}function r(t,e){return ya.range(n.length).map(function(n){return t+e*n})}var u,a,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new i;for(var a,o=-1,c=r.length;++o<c;)u.has(a=r[o])||u.set(a,n.push(a));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(a=n,o=0,t={t:"range",a:arguments},e):a},e.rangePoints=function(i,u){arguments.length<2&&(u=0);var c=i[0],l=i[1],s=(l-c)/(Math.max(1,n.length-1)+u);return a=r(n.length<2?(c+l)/2:c+s*u/2,s),o=0,t={t:"rangePoints",a:arguments},e},e.rangeBands=function(i,u,c){arguments.length<2&&(u=0),arguments.length<3&&(c=u);var l=i[1]<i[0],s=i[l-0],f=i[1-l],h=(f-s)/(n.length-u+2*c);return a=r(s+h*c,h),l&&a.reverse(),o=h*(1-u),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,u,c){arguments.length<2&&(u=0),arguments.length<3&&(c=u);var l=i[1]<i[0],s=i[l-0],f=i[1-l],h=Math.floor((f-s)/(n.length-u+2*c)),g=f-s-(n.length-u)*h;return a=r(s+Math.round(g/2),h),l&&a.reverse(),o=Math.round(h*(1-u)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Ui(t.a[0])},e.copy=function(){return cu(n,t)},e.domain(n)}function lu(n,t){function e(){var e=0,u=t.length;for(i=[];++e<u;)i[e-1]=ya.quantile(n,e/u);return r}function r(n){return isNaN(n=+n)?void 0:t[ya.bisect(i,n)]}var i;return r.domain=function(t){return arguments.length?(n=t.filter(function(n){return!isNaN(n)}).sort(ya.ascending),e()):n},r.range=function(n){return arguments.length?(t=n,e()):t},r.quantiles=function(){return i},r.copy=function(){return lu(n,t)},e()}function su(n,t,e){function r(t){return e[Math.max(0,Math.min(a,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),a=e.length-1,r}var u,a;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.copy=function(){return su(n,t,e)},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/u+n,[t,t+1/u]},i()}function fu(n,t){function e(e){return e>=e?t[ya.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return fu(n,t)},e}function hu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return hu(n)},t}function gu(n){return n.innerRadius}function pu(n){return n.outerRadius}function du(n){return n.startAngle}function mu(n){return n.endAngle}function vu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]+kc,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function yu(n){function t(t){function c(){d.push("M",o(n(v),f),s,l(n(m.reverse()),f),"Z")}for(var h,g,p,d=[],m=[],v=[],y=-1,M=t.length,x=ft(e),b=ft(i),_=e===r?function(){return g}:ft(r),w=i===u?function(){return p}:ft(u);++y<M;)a.call(this,h=t[y],y)?(m.push([g=+x.call(this,h,y),p=+b.call(this,h,y)]),v.push([+_.call(this,h,y),+w.call(this,h,y)])):m.length&&(c(),m=[],v=[]);return m.length&&c(),d.length?d.join(""):null}var e=Oe,r=Oe,i=0,u=Ye,a=Rt,o=Re,c=o.key,l=o,s="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(a=n,t):a},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?o=n:(o=ic.get(n)||Re).key,l=o.reverse||o,s=o.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Mu(n){return n.radius}function xu(n){return[n.x,n.y]}function bu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+kc;return[e*Math.cos(r),e*Math.sin(r)]}}function _u(){return 64}function wu(){return"circle"}function Su(n){var t=Math.sqrt(n/$a);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Eu(n,t){return za(n,zc),n.id=t,n}function ku(n,t,e,r){var i=n.id;return T(n,"function"==typeof e?function(n,u,a){n.__transition__[i].tween.set(t,r(e.call(n,n.__data__,u,a)))}:(e=r(e),function(n){n.__transition__[i].tween.set(t,e)}))}function Au(n){return null==n&&(n=""),function(){this.textContent=n}}function Nu(n,t,e,r){var u=n.__transition__||(n.__transition__={active:0,count:0}),a=u[e];if(!a){var o=r.time;return a=u[e]={tween:new i,event:ya.dispatch("start","end"),time:o,ease:r.ease,delay:r.delay,duration:r.duration},++u.count,ya.timer(function(r){function i(r){return u.active>e?l():(u.active=e,h.start.call(n,s,t),a.tween.forEach(function(e,r){(r=r.call(n,s,t))&&d.push(r)}),c(r)||ya.timer(c,0,o),1)}function c(r){if(u.active!==e)return l();for(var i=(r-g)/p,a=f(i),o=d.length;o>0;)d[--o].call(n,a);return i>=1?(l(),h.end.call(n,s,t),1):void 0}function l(){return--u.count?delete u[e]:delete n.__transition__,1}var s=n.__data__,f=a.ease,h=a.event,g=a.delay,p=a.duration,d=[];return r>=g?i(r):ya.timer(i,g,o),1},0,o),a}}function qu(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function Tu(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function Cu(n,t,e){if(r=[],e&&t.length>1){for(var r,i,u,a=Ui(n.domain()),o=-1,c=t.length,l=(t[1]-t[0])/++e;++o<c;)for(i=e;--i>0;)(u=+t[o]-i*l)>=a[0]&&r.push(u);for(--o,i=0;++i<e&&(u=+t[o]+i*l)<a[1];)r.push(u)}return r}function zu(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Du(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new Oc(e-1)),1),e}function u(n,e){return t(n=new Oc(+n),e),n}function a(n,r,u){var a=i(n),o=[];if(u>1)for(;r>a;)e(a)%u||o.push(new Date(+a)),t(a,1);else for(;r>a;)o.push(new Date(+a)),t(a,1);return o}function o(n,t,e){try{Oc=zu;var r=new zu;return r._=n,a(r,t,e)}finally{Oc=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=a;var c=n.utc=ju(n);return c.floor=c,c.round=ju(r),c.ceil=ju(i),c.offset=ju(u),c.range=o,n}function ju(n){return function(t,e){try{Oc=zu;var r=new zu;return r._=t,n(r,e)._}finally{Oc=Date}}}function Lu(n,t,e,r){for(var i,u,a=0,o=t.length,c=e.length;o>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(u=al[t.charAt(a++)],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function Hu(n){return new RegExp("^(?:"+n.map(ya.requote).join("|")+")","i")}function Fu(n){for(var t=new i,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Pu(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Ou(n,t,e){Gc.lastIndex=0;var r=Gc.exec(t.substring(e));return r?(n.w=Kc.get(r[0].toLowerCase()),e+r[0].length):-1}function Yu(n,t,e){Wc.lastIndex=0;var r=Wc.exec(t.substring(e));return r?(n.w=Jc.get(r[0].toLowerCase()),e+r[0].length):-1}function Ru(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Uu(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function Iu(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Vu(n,t,e){tl.lastIndex=0;var r=tl.exec(t.substring(e));return r?(n.m=el.get(r[0].toLowerCase()),e+r[0].length):-1}function Xu(n,t,e){Qc.lastIndex=0;var r=Qc.exec(t.substring(e));return r?(n.m=nl.get(r[0].toLowerCase()),e+r[0].length):-1}function Zu(n,t,e){return Lu(n,ul.c.toString(),t,e)}function Bu(n,t,e){return Lu(n,ul.x.toString(),t,e)}function $u(n,t,e){return Lu(n,ul.X.toString(),t,e)}function Wu(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Ju(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+2));return r?(n.y=Gu(+r[0]),e+r[0].length):-1}function Gu(n){return n+(n>68?1900:2e3)}function Ku(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Qu(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function na(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function ta(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function ea(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ra(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ia(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ua(n,t,e){var r=cl.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}function aa(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(Math.abs(t)/60),i=Math.abs(t)%60;return e+Pu(r,"0",2)+Pu(i,"0",2)}function oa(n,t,e){rl.lastIndex=0;var r=rl.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function ca(n){return n.toISOString()}function la(n,t,e){function r(t){return n(t)}return r.invert=function(t){return sa(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(sa)},r.nice=function(n){return r.domain(Xi(r.domain(),n))},r.ticks=function(e,i){var u=Ui(r.domain());if("function"!=typeof e){var a=u[1]-u[0],o=a/e,c=ya.bisect(sl,o);if(c==sl.length)return t.year(u,e);if(!c)return n.ticks(e).map(sa);Math.log(o/sl[c-1])<Math.log(sl[c]/o)&&--c,e=t[c],i=e[1],e=e[0].range}return e(u[0],new Date(+u[1]+1),i)},r.tickFormat=function(){return e},r.copy=function(){return la(n.copy(),t,e)},Wi(r,n)}function sa(n){return new Date(n)}function fa(n){return function(t){for(var e=n.length-1,r=n[e];!r[1](t);)r=n[--e];return r[0](t)}}function ha(n){var t=new Date(n,0,1);return t.setFullYear(n),t}function ga(n){var t=n.getFullYear(),e=ha(t),r=ha(t+1);return t+(n-e)/(r-e)}function pa(n){var t=new Date(Date.UTC(n,0,1));return t.setUTCFullYear(n),t}function da(n){var t=n.getUTCFullYear(),e=pa(t),r=pa(t+1);return t+(n-e)/(r-e)}function ma(n){return JSON.parse(n.responseText)}function va(n){var t=Ma.createRange();return t.selectNode(Ma.body),t.createContextualFragment(n.responseText)}var ya={version:"3.2.3"};Date.now||(Date.now=function(){return+new Date});var Ma=document,xa=Ma.documentElement,ba=window;try{Ma.createElement("div").style.setProperty("opacity",0,"")}catch(_a){var wa=ba.CSSStyleDeclaration.prototype,Sa=wa.setProperty;wa.setProperty=function(n,t,e){Sa.call(this,n,t+"",e)}}ya.ascending=function(n,t){return t>n?-1:n>t?1:n>=t?0:0/0},ya.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},ya.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u&&!(null!=(e=n[i])&&e>=e);)e=void 0;for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u&&!(null!=(e=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ya.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u&&!(null!=(e=n[i])&&e>=e);)e=void 0;for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u&&!(null!=(e=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ya.extent=function(n,t){var e,r,i,u=-1,a=n.length;if(1===arguments.length){for(;++u<a&&!(null!=(e=i=n[u])&&e>=e);)e=i=void 0;for(;++u<a;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<a&&!(null!=(e=i=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<a;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ya.sum=function(n,t){var e,r=0,i=n.length,u=-1;if(1===arguments.length)for(;++u<i;)isNaN(e=+n[u])||(r+=e);else for(;++u<i;)isNaN(e=+t.call(n,n[u],u))||(r+=e);return r},ya.mean=function(t,e){var r,i=t.length,u=0,a=-1,o=0;if(1===arguments.length)for(;++a<i;)n(r=t[a])&&(u+=(r-u)/++o);else for(;++a<i;)n(r=e.call(t,t[a],a))&&(u+=(r-u)/++o);return o?u:void 0},ya.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ya.median=function(t,e){return arguments.length>1&&(t=t.map(e)),t=t.filter(n),t.length?ya.quantile(t.sort(ya.ascending),.5):void 0},ya.bisector=function(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n.call(t,t[u],u)<e?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;e<n.call(t,t[u],u)?i=u:r=u+1}return r}}};var Ea=ya.bisector(function(n){return n});ya.bisectLeft=Ea.left,ya.bisect=ya.bisectRight=Ea.right,ya.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},ya.permute=function(n,t){for(var e=[],r=-1,i=t.length;++r<i;)e[r]=n[t[r]];return e},ya.zip=function(){if(!(i=arguments.length))return[];for(var n=-1,e=ya.min(arguments,t),r=new Array(e);++n<e;)for(var i,u=-1,a=r[n]=new Array(i);++u<i;)a[u]=arguments[u][n];return r},ya.transpose=function(n){return ya.zip.apply(ya,n)},ya.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ya.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ya.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ya.merge=function(n){return Array.prototype.concat.apply([],n)},ya.range=function(n,t,r){if(arguments.length<3&&(r=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/r)throw new Error("infinite range");var i,u=[],a=e(Math.abs(r)),o=-1;if(n*=a,t*=a,r*=a,0>r)for(;(i=n+r*++o)>t;)u.push(i/a);else for(;(i=n+r*++o)<t;)u.push(i/a);return u},ya.map=function(n){var t=new i;for(var e in n)t.set(e,n[e]);return t},r(i,{has:function(n){return ka+n in this},get:function(n){return this[ka+n]},set:function(n,t){return this[ka+n]=t},remove:function(n){return n=ka+n,n in this&&delete this[n]},keys:function(){var n=[];return this.forEach(function(t){n.push(t)}),n},values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},forEach:function(n){for(var t in this)t.charCodeAt(0)===Aa&&n.call(this,t.substring(1),this[t])}});var ka="\0",Aa=ka.charCodeAt(0);ya.nest=function(){function n(t,o,c){if(c>=a.length)return r?r.call(u,o):e?o.sort(e):o;for(var l,s,f,h,g=-1,p=o.length,d=a[c++],m=new i;++g<p;)(h=m.get(l=d(s=o[g])))?h.push(s):m.set(l,[s]);return t?(s=t(),f=function(e,r){s.set(e,n(t,r,c))
}):(s={},f=function(e,r){s[e]=n(t,r,c)}),m.forEach(f),s}function t(n,e){if(e>=a.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,u={},a=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ya.map,e,0),0)},u.key=function(n){return a.push(n),u},u.sortKeys=function(n){return o[a.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ya.set=function(n){var t=new u;if(n)for(var e=0;e<n.length;e++)t.add(n[e]);return t},r(u,{has:function(n){return ka+n in this},add:function(n){return this[ka+n]=!0,n},remove:function(n){return n=ka+n,n in this&&delete this[n]},values:function(){var n=[];return this.forEach(function(t){n.push(t)}),n},forEach:function(n){for(var t in this)t.charCodeAt(0)===Aa&&n.call(this,t.substring(1))}}),ya.behavior={},ya.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=a(n,t,t[e]);return n};var Na=["webkit","ms","moz","Moz","o","O"],qa=l;try{qa(xa.childNodes)[0].nodeType}catch(Ta){qa=c}ya.dispatch=function(){for(var n=new f,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=h(n);return n},f.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ya.event=null,ya.requote=function(n){return n.replace(Ca,"\\$&")};var Ca=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,za={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},Da=function(n,t){return t.querySelector(n)},ja=function(n,t){return t.querySelectorAll(n)},La=xa[o(xa,"matchesSelector")],Ha=function(n,t){return La.call(n,t)};"function"==typeof Sizzle&&(Da=function(n,t){return Sizzle(n,t)[0]||null},ja=function(n,t){return Sizzle.uniqueSort(Sizzle(n,t))},Ha=Sizzle.matchesSelector),ya.selection=function(){return Ya};var Fa=ya.selection.prototype=[];Fa.select=function(n){var t,e,r,i,u=[];n=v(n);for(var a=-1,o=this.length;++a<o;){u.push(t=[]),t.parentNode=(r=this[a]).parentNode;for(var c=-1,l=r.length;++c<l;)(i=r[c])?(t.push(e=n.call(i,i.__data__,c)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return m(u)},Fa.selectAll=function(n){var t,e,r=[];n=y(n);for(var i=-1,u=this.length;++i<u;)for(var a=this[i],o=-1,c=a.length;++o<c;)(e=a[o])&&(r.push(t=qa(n.call(e,e.__data__,o))),t.parentNode=e);return m(r)};var Pa={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/"};ya.ns={prefix:Pa,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),Pa.hasOwnProperty(e)?{space:Pa[e],local:n}:n}},Fa.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ya.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(M(t,n[t]));return this}return this.each(M(n,t))},Fa.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=n.trim().split(/^|\s+/g)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!b(n[i]).test(t))return!1;return!0}for(t in n)this.each(_(t,n[t]));return this}return this.each(_(n,t))},Fa.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(S(e,n[e],t));return this}if(2>r)return ba.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(S(n,t,e))},Fa.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(E(t,n[t]));return this}return this.each(E(n,t))},Fa.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Fa.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Fa.append=function(n){return n=k(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Fa.insert=function(n,t){return n=k(n),t=v(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments))})},Fa.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},Fa.data=function(n,t){function e(n,e){var r,u,a,o=n.length,f=e.length,h=Math.min(o,f),g=new Array(f),p=new Array(f),d=new Array(o);if(t){var m,v=new i,y=new i,M=[];for(r=-1;++r<o;)m=t.call(u=n[r],u.__data__,r),v.has(m)?d[r]=u:v.set(m,u),M.push(m);for(r=-1;++r<f;)m=t.call(e,a=e[r],r),(u=v.get(m))?(g[r]=u,u.__data__=a):y.has(m)||(p[r]=A(a)),y.set(m,a),v.remove(m);for(r=-1;++r<o;)v.has(M[r])&&(d[r]=n[r])}else{for(r=-1;++r<h;)u=n[r],a=e[r],u?(u.__data__=a,g[r]=u):p[r]=A(a);for(;f>r;++r)p[r]=A(e[r]);for(;o>r;++r)d[r]=n[r]}p.update=g,p.parentNode=g.parentNode=d.parentNode=n.parentNode,c.push(p),l.push(g),s.push(d)}var r,u,a=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++a<o;)(u=r[a])&&(n[a]=u.__data__);return n}var c=C([]),l=m([]),s=m([]);if("function"==typeof n)for(;++a<o;)e(r=this[a],n.call(r,r.parentNode.__data__,a));else for(;++a<o;)e(r=this[a],n);return l.enter=function(){return c},l.exit=function(){return s},l},Fa.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Fa.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=N(n));for(var u=0,a=this.length;a>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var o=0,c=e.length;c>o;o++)(r=e[o])&&n.call(r,r.__data__,o)&&t.push(r)}return m(i)},Fa.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Fa.sort=function(n){n=q.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Fa.each=function(n){return T(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Fa.call=function(n){var t=qa(arguments);return n.apply(t[0]=this,t),this},Fa.empty=function(){return!this.node()},Fa.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Fa.size=function(){var n=0;return this.each(function(){++n}),n};var Oa=[];ya.selection.enter=C,ya.selection.enter.prototype=Oa,Oa.append=Fa.append,Oa.insert=Fa.insert,Oa.empty=Fa.empty,Oa.node=Fa.node,Oa.call=Fa.call,Oa.size=Fa.size,Oa.select=function(n){for(var t,e,r,i,u,a=[],o=-1,c=this.length;++o<c;){r=(i=this[o]).update,a.push(t=[]),t.parentNode=i.parentNode;for(var l=-1,s=i.length;++l<s;)(u=i[l])?(t.push(r[l]=e=n.call(i.parentNode,u.__data__,l)),e.__data__=u.__data__):t.push(null)}return m(a)},Fa.transition=function(){var n,t,e=qc||++Dc,r=[],i=Object.create(jc);i.time=Date.now();for(var u=-1,a=this.length;++u<a;){r.push(n=[]);for(var o=this[u],c=-1,l=o.length;++c<l;)(t=o[c])&&Nu(t,c,e,i),n.push(t)}return Eu(r,e)},ya.select=function(n){var t=["string"==typeof n?Da(n,Ma):n];return t.parentNode=xa,m([t])},ya.selectAll=function(n){var t=qa("string"==typeof n?ja(n,Ma):n);return t.parentNode=xa,m([t])};var Ya=ya.select(xa);Fa.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(z(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(z(n,t,e))};var Ra=ya.map({mouseenter:"mouseover",mouseleave:"mouseout"});Ra.forEach(function(n){"on"+n in Ma&&Ra.remove(n)});var Ua=o(xa.style,"userSelect");ya.mouse=function(n){return H(n,p())};var Ia=/WebKit/.test(ba.navigator.userAgent)?-1:0;ya.touches=function(n,t){return arguments.length<2&&(t=p().touches),t?qa(t).map(function(t){var e=H(n,t);return e.identifier=t.identifier,e}):[]},ya.behavior.drag=function(){function n(){this.on("mousedown.drag",t).on("touchstart.drag",t)}function t(){function n(){var n=a.parentNode;return null!=l?ya.touches(n).filter(function(n){return n.identifier===l})[0]:ya.mouse(n)}function t(){if(!a.parentNode)return i();var t=n(),e=t[0]-s[0],r=t[1]-s[1];f|=e|r,s=t,o({type:"drag",x:t[0]+u[0],y:t[1]+u[1],dx:e,dy:r})}function i(){g.on(null!=l?"touchmove.drag-"+l:"mousemove.drag",null).on(null!=l?"touchend.drag-"+l:"mouseup.drag",null),h(f&&ya.event.target===c),o({type:"dragend"})}var u,a=this,o=e.of(a,arguments),c=ya.event.target,l=ya.event.touches?ya.event.changedTouches[0].identifier:null,s=n(),f=0,h=L(null!=l?"drag-"+l:"drag"),g=ya.select(ba).on(null!=l?"touchmove.drag-"+l:"mousemove.drag",t).on(null!=l?"touchend.drag-"+l:"mouseup.drag",i,!0);r?(u=r.apply(a,arguments),u=[u.x-s[0],u.y-s[1]]):u=[0,0],o({type:"dragstart"})}var e=d(n,"drag","dragstart","dragend"),r=null;return n.origin=function(t){return arguments.length?(r=t,n):r},ya.rebind(n,e,"on")},ya.behavior.zoom=function(){function n(){this.on("mousedown.zoom",o).on("mousemove.zoom",l).on(Za+".zoom",c).on("dblclick.zoom",s).on("touchstart.zoom",f).on("touchmove.zoom",h).on("touchend.zoom",f)}function t(n){return[(n[0]-_[0])/w,(n[1]-_[1])/w]}function e(n){return[n[0]*w+_[0],n[1]*w+_[1]]}function r(n){w=Math.max(S[0],Math.min(S[1],n))}function i(n,t){t=e(t),_[0]+=n[0]-t[0],_[1]+=n[1]-t[1]}function u(){y&&y.domain(v.range().map(function(n){return(n-_[0])/w}).map(v.invert)),x&&x.domain(M.range().map(function(n){return(n-_[1])/w}).map(M.invert))}function a(n){u(),ya.event.preventDefault(),n({type:"zoom",scale:w,translate:_})}function o(){function n(){c=1,i(ya.mouse(r),s),a(u)}function e(){l.on("mousemove.zoom",null).on("mouseup.zoom",null),f(c&&ya.event.target===o)}var r=this,u=E.of(r,arguments),o=ya.event.target,c=0,l=ya.select(ba).on("mousemove.zoom",n).on("mouseup.zoom",e),s=t(ya.mouse(r)),f=L("zoom")}function c(){g||(g=t(ya.mouse(this))),r(Math.pow(2,.002*Va())*w),i(ya.mouse(this),g),a(E.of(this,arguments))}function l(){g=null}function s(){var n=ya.mouse(this),e=t(n),u=Math.log(w)/Math.LN2;r(Math.pow(2,ya.event.shiftKey?Math.ceil(u)-1:Math.floor(u)+1)),i(n,e),a(E.of(this,arguments))}function f(){var n=ya.touches(this),e=Date.now();if(m=w,g={},p=0,n.forEach(function(n){g[n.identifier]=t(n)}),1===n.length){if(500>e-b){var u=n[0],o=t(n[0]);r(2*w),i(u,o),a(E.of(this,arguments))}b=e}else if(n.length>1){var u=n[0],c=n[1],l=u[0]-c[0],s=u[1]-c[1];p=l*l+s*s}}function h(){var n=ya.touches(this),t=n[0],e=g[t.identifier];if(u=n[1]){var u,o=g[u.identifier],c=ya.event.scale;if(null==c){var l=(l=u[0]-t[0])*l+(l=u[1]-t[1])*l;c=p&&Math.sqrt(l/p)}t=[(t[0]+u[0])/2,(t[1]+u[1])/2],e=[(e[0]+o[0])/2,(e[1]+o[1])/2],r(c*m)}i(t,e),b=null,a(E.of(this,arguments))}var g,p,m,v,y,M,x,b,_=[0,0],w=1,S=Xa,E=d(n,"zoom");return n.translate=function(t){return arguments.length?(_=t.map(Number),u(),n):_},n.scale=function(t){return arguments.length?(w=+t,u(),n):w},n.scaleExtent=function(t){return arguments.length?(S=null==t?Xa:t.map(Number),n):S},n.x=function(t){return arguments.length?(y=t,v=t.copy(),_=[0,0],w=1,n):y},n.y=function(t){return arguments.length?(x=t,M=t.copy(),_=[0,0],w=1,n):x},ya.rebind(n,E,"on")};var Va,Xa=[0,1/0],Za="onwheel"in Ma?(Va=function(){return-ya.event.deltaY*(ya.event.deltaMode?120:1)},"wheel"):"onmousewheel"in Ma?(Va=function(){return ya.event.wheelDelta},"mousewheel"):(Va=function(){return-ya.event.detail},"MozMousePixelScroll");F.prototype.toString=function(){return this.rgb()+""},ya.hsl=function(n,t,e){return 1===arguments.length?n instanceof O?P(n.h,n.s,n.l):at(""+n,ot,P):P(+n,+t,+e)};var Ba=O.prototype=new F;Ba.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),P(this.h,this.s,this.l/n)},Ba.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),P(this.h,this.s,n*this.l)},Ba.rgb=function(){return Y(this.h,this.s,this.l)};var $a=Math.PI,Wa=1e-6,Ja=Wa*Wa,Ga=$a/180,Ka=180/$a;ya.hcl=function(n,t,e){return 1===arguments.length?n instanceof $?B(n.h,n.c,n.l):n instanceof G?Q(n.l,n.a,n.b):Q((n=ct((n=ya.rgb(n)).r,n.g,n.b)).l,n.a,n.b):B(+n,+t,+e)};var Qa=$.prototype=new F;Qa.brighter=function(n){return B(this.h,this.c,Math.min(100,this.l+no*(arguments.length?n:1)))},Qa.darker=function(n){return B(this.h,this.c,Math.max(0,this.l-no*(arguments.length?n:1)))},Qa.rgb=function(){return W(this.h,this.c,this.l).rgb()},ya.lab=function(n,t,e){return 1===arguments.length?n instanceof G?J(n.l,n.a,n.b):n instanceof $?W(n.l,n.c,n.h):ct((n=ya.rgb(n)).r,n.g,n.b):J(+n,+t,+e)};var no=18,to=.95047,eo=1,ro=1.08883,io=G.prototype=new F;io.brighter=function(n){return J(Math.min(100,this.l+no*(arguments.length?n:1)),this.a,this.b)},io.darker=function(n){return J(Math.max(0,this.l-no*(arguments.length?n:1)),this.a,this.b)},io.rgb=function(){return K(this.l,this.a,this.b)},ya.rgb=function(n,t,e){return 1===arguments.length?n instanceof it?rt(n.r,n.g,n.b):at(""+n,rt,Y):rt(~~n,~~t,~~e)};var uo=it.prototype=new F;uo.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),rt(Math.min(255,Math.floor(t/n)),Math.min(255,Math.floor(e/n)),Math.min(255,Math.floor(r/n)))):rt(i,i,i)},uo.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),rt(Math.floor(n*this.r),Math.floor(n*this.g),Math.floor(n*this.b))},uo.hsl=function(){return ot(this.r,this.g,this.b)},uo.toString=function(){return"#"+ut(this.r)+ut(this.g)+ut(this.b)};var ao=ya.map({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"});ao.forEach(function(n,t){ao.set(n,at(t,rt,Y))}),ya.functor=ft,ya.xhr=gt(ht),ya.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var a=ya.xhr(n,t,u);return a.row=function(n){return arguments.length?a.response(null==(e=n)?r:i(n)):e},a.row(e)}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function a(t){return t.map(o).join(n)}function o(n){return c.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var c=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(s>=c)return a;if(i)return i=!1,u;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}s=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++s):10===r&&(i=!0),n.substring(t+1,e).replace(/""/g,'"')}for(;c>s;){var r=n.charCodeAt(s++),o=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(s)&&(++s,++o);else if(r!==l)continue;return n.substring(t,s-o)}return n.substring(t)}for(var r,i,u={},a={},o=[],c=n.length,s=0,f=0;(r=e())!==a;){for(var h=[];r!==u&&r!==a;)h.push(r),r=e();(!t||(h=t(h,f++)))&&o.push(h)}return o},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new u,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(a).join("\n")},e},ya.csv=ya.dsv(",","text/csv"),ya.tsv=ya.dsv(" ","text/tab-separated-values");var oo,co,lo,so;ya.timer=function(n,t,e){if(arguments.length<3){if(arguments.length<2)t=0;else if(!isFinite(t))return;e=Date.now()}var r=e+t,i={callback:n,time:r,next:null};co?co.next=i:oo=i,co=i,lo||(so=clearTimeout(so),lo=1,fo(mt))},ya.timer.flush=function(){vt(),yt()};var fo=ba[o(ba,"requestAnimationFrame")]||function(n){setTimeout(n,17)},ho=".",go=",",po=[3,3],mo=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"].map(Mt);ya.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=ya.round(n,xt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((0>=e?e+1:e-1)/3)))),mo[8+e/3]},ya.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)},ya.format=function(n){var t=vo.exec(n),e=t[1]||" ",r=t[2]||">",i=t[3]||"",u=t[4]||"",a=t[5],o=+t[6],c=t[7],l=t[8],s=t[9],f=1,h="",g=!1;switch(l&&(l=+l.substring(1)),(a||"0"===e&&"="===r)&&(a=e="0",r="=",c&&(o-=Math.floor((o-1)/4))),s){case"n":c=!0,s="g";break;case"%":f=100,h="%",s="f";break;case"p":f=100,h="%",s="r";break;case"b":case"o":case"x":case"X":u&&(u="0"+s.toLowerCase());case"c":case"d":g=!0,l=0;break;case"s":f=-1,s="r"}"#"===u&&(u=""),"r"!=s||l||(s="g"),null!=l&&("g"==s?l=Math.max(1,Math.min(21,l)):("e"==s||"f"==s)&&(l=Math.max(0,Math.min(20,l)))),s=yo.get(s)||bt;var p=a&&c;return function(n){if(g&&n%1)return"";var t=0>n||0===n&&0>1/n?(n=-n,"-"):i;if(0>f){var d=ya.formatPrefix(n,l);n=d.scale(n),h=d.symbol}else n*=f;n=s(n,l),!a&&c&&(n=Mo(n));var m=u.length+n.length+(p?0:t.length),v=o>m?new Array(m=o-m+1).join(e):"";return p&&(n=Mo(v+n)),ho&&n.replace(".",ho),t+=u,("<"===r?t+n+v:">"===r?v+t+n:"^"===r?v.substring(0,m>>=1)+t+n+v.substring(m):t+(p?n:v+n))+h}};var vo=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,yo=ya.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ya.round(n,xt(n,t))).toFixed(Math.max(0,Math.min(20,xt(n*(1+1e-15),t))))}}),Mo=ht;if(po){var xo=po.length;Mo=function(n){for(var t=n.lastIndexOf("."),e=t>=0?"."+n.substring(t+1):(t=n.length,""),r=[],i=0,u=po[0];t>0&&u>0;)r.push(n.substring(t-=u,t+u)),u=po[i=(i+1)%xo];return r.reverse().join(go||"")+e}}ya.geo={},_t.prototype={s:0,t:0,add:function(n){wt(n,this.t,bo),wt(bo.s,this.s,this),this.s?this.t+=bo.t:this.s=bo.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var bo=new _t;ya.geo.stream=function(n,t){n&&_o.hasOwnProperty(n.type)?_o[n.type](n,t):St(n,t)};var _o={Feature:function(n,t){St(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)St(e[r].geometry,t)}},wo={Sphere:function(n,t){t.sphere()},Point:function(n,t){var e=n.coordinates;t.point(e[0],e[1])},MultiPoint:function(n,t){for(var e,r=n.coordinates,i=-1,u=r.length;++i<u;)e=r[i],t.point(e[0],e[1])},LineString:function(n,t){Et(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)Et(e[r],t,0)},Polygon:function(n,t){kt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)kt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)St(e[r],t)}};ya.geo.area=function(n){return So=0,ya.geo.stream(n,ko),So};var So,Eo=new _t,ko={sphere:function(){So+=4*$a},point:s,lineStart:s,lineEnd:s,polygonStart:function(){Eo.reset(),ko.lineStart=At},polygonEnd:function(){var n=2*Eo;So+=0>n?4*$a+n:n,ko.lineStart=ko.lineEnd=ko.point=s}};ya.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=Nt([t*Ga,e*Ga]);if(v){var i=Tt(v,r),u=[i[1],-i[0],0],a=Tt(u,i);Dt(a),a=jt(a);var c=t-p,l=c>0?1:-1,d=a[0]*Ka*l,m=Math.abs(c)>180;if(m^(d>l*p&&l*t>d)){var y=a[1]*Ka;y>g&&(g=y)}else if(d=(d+360)%360-180,m^(d>l*p&&l*t>d)){var y=-a[1]*Ka;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);m?p>t?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t)}else n(t,e);v=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,v=null}function i(n,e){if(v){var r=n-p;y+=Math.abs(r)>180?r+(r>0?360:-360):r}else d=n,m=e;ko.point(n,e),t(n,e)}function u(){ko.lineStart()}function a(){i(d,m),ko.lineEnd(),Math.abs(y)>Wa&&(s=-(h=180)),x[0]=s,x[1]=h,v=null}function o(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var s,f,h,g,p,d,m,v,y,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=a,y=0,ko.polygonStart()},polygonEnd:function(){ko.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>Eo?(s=-(h=180),f=-(g=90)):y>Wa?g=90:-Wa>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],ya.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],l(e[0],i)||l(e[1],i)?(o(i[0],e[1])>o(i[0],i[1])&&(i[1]=e[1]),o(e[0],i[1])>o(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var a,e,p=-1/0,t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(a=o(i[1],e[0]))>p&&(p=a,s=e[0],h=i[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),ya.geo.centroid=function(n){Ao=No=qo=To=Co=zo=Do=jo=Lo=Ho=Fo=0,ya.geo.stream(n,Po);var t=Lo,e=Ho,r=Fo,i=t*t+e*e+r*r;return Ja>i&&(t=zo,e=Do,r=jo,Wa>No&&(t=qo,e=To,r=Co),i=t*t+e*e+r*r,Ja>i)?[0/0,0/0]:[Math.atan2(e,t)*Ka,I(r/Math.sqrt(i))*Ka]};var Ao,No,qo,To,Co,zo,Do,jo,Lo,Ho,Fo,Po={sphere:s,point:Ht,lineStart:Pt,lineEnd:Ot,polygonStart:function(){Po.lineStart=Yt},polygonEnd:function(){Po.lineStart=Pt}},Oo=Vt(Rt,Wt,Gt,Kt),Yo=[-$a,0],Ro=1e9;(ya.geo.conicEqualArea=function(){return re(ie)}).raw=ie,ya.geo.albers=function(){return ya.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ya.geo.albersUsa=function(){function n(n){var u=n[0],a=n[1];return t=null,e(u,a),t||(r(u,a),t)||i(u,a),t}var t,e,r,i,u=ya.geo.albers(),a=ya.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),o=ya.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?a:i>=.166&&.234>i&&r>=-.214&&-.115>r?o:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=a.stream(n),r=o.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),a.precision(t),o.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),a.scale(.35*t),o.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var l=u.scale(),s=+t[0],f=+t[1];return e=u.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=a.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Wa,f+.12*l+Wa],[s-.214*l-Wa,f+.234*l-Wa]]).stream(c).point,i=o.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Wa,f+.166*l+Wa],[s-.115*l-Wa,f+.234*l-Wa]]).stream(c).point,n},n.scale(1070)};var Uo,Io,Vo,Xo,Zo,Bo,$o={point:s,lineStart:s,lineEnd:s,polygonStart:function(){Io=0,$o.lineStart=ue},polygonEnd:function(){$o.lineStart=$o.lineEnd=$o.point=s,Uo+=Math.abs(Io/2)}},Wo={point:ae,lineStart:s,lineEnd:s,polygonStart:s,polygonEnd:s},Jo={point:le,lineStart:se,lineEnd:fe,polygonStart:function(){Jo.lineStart=he},polygonEnd:function(){Jo.point=le,Jo.lineStart=se,Jo.lineEnd=fe}};ya.geo.path=function(){function n(n){return n&&("function"==typeof o&&u.pointRadius(+o.apply(this,arguments)),a&&a.valid||(a=i(u)),ya.geo.stream(n,a)),u.result()}function t(){return a=null,n}var e,r,i,u,a,o=4.5;return n.area=function(n){return Uo=0,ya.geo.stream(n,i($o)),Uo},n.centroid=function(n){return qo=To=Co=zo=Do=jo=Lo=Ho=Fo=0,ya.geo.stream(n,i(Jo)),Fo?[Lo/Fo,Ho/Fo]:jo?[zo/jo,Do/jo]:Co?[qo/Co,To/Co]:[0/0,0/0]},n.bounds=function(n){return Zo=Bo=-(Vo=Xo=1/0),ya.geo.stream(n,i(Wo)),[[Vo,Xo],[Zo,Bo]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||de(n):ht,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new oe:new ge(n),"function"!=typeof o&&u.pointRadius(o),t()):r},n.pointRadius=function(t){return arguments.length?(o="function"==typeof t?t:(u.pointRadius(+t),+t),n):o},n.projection(ya.geo.albersUsa()).context(null)},ya.geo.projection=me,ya.geo.projectionMutator=ve,(ya.geo.equirectangular=function(){return me(Me)}).raw=Me.invert=Me,ya.geo.rotation=function(n){function t(t){return t=n(t[0]*Ga,t[1]*Ga),t[0]*=Ka,t[1]*=Ka,t}return n=xe(n[0]%360*Ga,n[1]*Ga,n.length>2?n[2]*Ga:0),t.invert=function(t){return t=n.invert(t[0]*Ga,t[1]*Ga),t[0]*=Ka,t[1]*=Ka,t},t},ya.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=xe(-n[0]*Ga,-n[1]*Ga,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Ka,n[1]*=Ka}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=Se((t=+r)*Ga,i*Ga),n):t},n.precision=function(r){return arguments.length?(e=Se(t*Ga,(i=+r)*Ga),n):i},n.angle(90)},ya.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Ga,i=n[1]*Ga,u=t[1]*Ga,a=Math.sin(r),o=Math.cos(r),c=Math.sin(i),l=Math.cos(i),s=Math.sin(u),f=Math.cos(u);return Math.atan2(Math.sqrt((e=f*a)*e+(e=l*s-c*f*o)*e),c*s+l*f*o)},ya.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ya.range(Math.ceil(u/m)*m,i,m).map(h).concat(ya.range(Math.ceil(l/v)*v,c,v).map(g)).concat(ya.range(Math.ceil(r/p)*p,e,p).filter(function(n){return Math.abs(n%m)>Wa}).map(s)).concat(ya.range(Math.ceil(o/d)*d,a,d).filter(function(n){return Math.abs(n%v)>Wa}).map(f))}var e,r,i,u,a,o,c,l,s,f,h,g,p=10,d=p,m=90,v=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(g(c).slice(1),h(i).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],l=+t[0][1],c=+t[1][1],u>i&&(t=u,u=i,i=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[u,l],[i,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],o=+t[0][1],a=+t[1][1],r>e&&(t=r,r=e,e=t),o>a&&(t=o,o=a,a=t),n.precision(y)):[[r,o],[e,a]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(m=+t[0],v=+t[1],n):[m,v]},n.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],n):[p,d]},n.precision=function(t){return arguments.length?(y=+t,s=ke(o,a,90),f=Ae(r,e,y),h=ke(l,c,90),g=Ae(u,i,y),n):y},n.majorExtent([[-180,-90+Wa],[180,90-Wa]]).minorExtent([[-180,-80-Wa],[180,80+Wa]])},ya.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Ne,i=qe;return n.distance=function(){return ya.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ya.geo.interpolate=function(n,t){return Te(n[0]*Ga,n[1]*Ga,t[0]*Ga,t[1]*Ga)},ya.geo.length=function(n){return Go=0,ya.geo.stream(n,Ko),Go};var Go,Ko={sphere:s,point:s,lineStart:Ce,lineEnd:s,polygonStart:s,polygonEnd:s},Qo=ze(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ya.geo.azimuthalEqualArea=function(){return me(Qo)}).raw=Qo;var nc=ze(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},ht);(ya.geo.azimuthalEquidistant=function(){return me(nc)}).raw=nc,(ya.geo.conicConformal=function(){return re(De)}).raw=De,(ya.geo.conicEquidistant=function(){return re(je)}).raw=je;var tc=ze(function(n){return 1/n},Math.atan);(ya.geo.gnomonic=function(){return me(tc)}).raw=tc,Le.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-$a/2]},(ya.geo.mercator=function(){return He(Le)}).raw=Le;var ec=ze(function(){return 1},Math.asin);(ya.geo.orthographic=function(){return me(ec)}).raw=ec;var rc=ze(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ya.geo.stereographic=function(){return me(rc)}).raw=rc,Fe.invert=function(n,t){return[Math.atan2(V(n),Math.cos(t)),I(Math.sin(t)/X(n))]},(ya.geo.transverseMercator=function(){return He(Fe)}).raw=Fe,ya.geom={},ya.svg={},ya.svg.line=function(){return Pe(ht)};var ic=ya.map({linear:Re,"linear-closed":Ue,step:Ie,"step-before":Ve,"step-after":Xe,basis:Ge,"basis-open":Ke,"basis-closed":Qe,bundle:nr,cardinal:$e,"cardinal-open":Ze,"cardinal-closed":Be,monotone:ar});ic.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var uc=[0,2/3,1/3,0],ac=[0,1/3,2/3,0],oc=[0,1/6,2/3,1/6];ya.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i,u,a,o,c,l,s,f,h,g,p,d=ft(e),m=ft(r),v=n.length,y=v-1,M=[],x=[],b=0;
if(d===Oe&&r===Ye)t=n;else for(u=0,t=[];v>u;++u)t.push([+d.call(this,i=n[u],u),+m.call(this,i,u)]);for(u=1;v>u;++u)(t[u][1]<t[b][1]||t[u][1]==t[b][1]&&t[u][0]<t[b][0])&&(b=u);for(u=0;v>u;++u)u!==b&&(c=t[u][1]-t[b][1],o=t[u][0]-t[b][0],M.push({angle:Math.atan2(c,o),index:u}));for(M.sort(function(n,t){return n.angle-t.angle}),g=M[0].angle,h=M[0].index,f=0,u=1;y>u;++u){if(a=M[u].index,g==M[u].angle){if(o=t[h][0]-t[b][0],c=t[h][1]-t[b][1],l=t[a][0]-t[b][0],s=t[a][1]-t[b][1],o*o+c*c>=l*l+s*s){M[u].index=-1;continue}M[f].index=-1}g=M[u].angle,f=u,h=a}for(x.push(b),u=0,a=0;2>u;++a)M[a].index>-1&&(x.push(M[a].index),u++);for(p=x.length;y>a;++a)if(!(M[a].index<0)){for(;!or(x[p-2],x[p-1],M[a].index,t);)--p;x[p++]=M[a].index}var _=[];for(u=p-1;u>=0;--u)_.push(n[x[u]]);return _}var e=Oe,r=Ye;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ya.geom.polygon=function(n){return za(n,cc),n};var cc=ya.geom.polygon.prototype=[];cc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},cc.centroid=function(n){var t,e,r=-1,i=this.length,u=0,a=0,o=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=o,o=this[r],e=t[0]*o[1]-o[0]*t[1],u+=(t[0]+o[0])*e,a+=(t[1]+o[1])*e;return[u*n,a*n]},cc.clip=function(n){for(var t,e,r,i,u,a,o=sr(n),c=-1,l=this.length-sr(this),s=this[l-1];++c<l;){for(t=n.slice(),n.length=0,i=this[c],u=t[(r=t.length-o)-1],e=-1;++e<r;)a=t[e],cr(a,s,i)?(cr(u,s,i)||n.push(lr(u,a,s,i)),n.push(a)):cr(u,s,i)&&n.push(lr(u,a,s,i)),u=a;o&&n.push(n[0]),s=i}return n},ya.geom.delaunay=function(n){var t=n.map(function(){return[]}),e=[];return fr(n,function(e){t[e.region.l.index].push(n[e.region.r.index])}),t.forEach(function(t,r){var i=n[r],u=i[0],a=i[1];t.forEach(function(n){n.angle=Math.atan2(n[0]-u,n[1]-a)}),t.sort(function(n,t){return n.angle-t.angle});for(var o=0,c=t.length-1;c>o;o++)e.push([i,t[o],t[o+1]])}),e},ya.geom.voronoi=function(n){function t(n){var t,u,a,o=n.map(function(){return[]}),c=ft(e),l=ft(r),s=n.length,f=1e6;if(c===Oe&&l===Ye)t=n;else for(t=new Array(s),a=0;s>a;++a)t[a]=[+c.call(this,u=n[a],a),+l.call(this,u,a)];if(fr(t,function(n){var t,e,r,i,u,a;1===n.a&&n.b>=0?(t=n.ep.r,e=n.ep.l):(t=n.ep.l,e=n.ep.r),1===n.a?(u=t?t.y:-f,r=n.c-n.b*u,a=e?e.y:f,i=n.c-n.b*a):(r=t?t.x:-f,u=n.c-n.a*r,i=e?e.x:f,a=n.c-n.a*i);var c=[r,u],l=[i,a];o[n.region.l.index].push(c,l),o[n.region.r.index].push(c,l)}),o=o.map(function(n,e){var r=t[e][0],i=t[e][1],u=n.map(function(n){return Math.atan2(n[0]-r,n[1]-i)}),a=ya.range(n.length).sort(function(n,t){return u[n]-u[t]});return a.filter(function(n,t){return!t||u[n]-u[a[t-1]]>Wa}).map(function(t){return n[t]})}),o.forEach(function(n,e){var r=n.length;if(!r)return n.push([-f,-f],[-f,f],[f,f],[f,-f]);if(!(r>2)){var i=t[e],u=n[0],a=n[1],o=i[0],c=i[1],l=u[0],s=u[1],h=a[0],g=a[1],p=Math.abs(h-l),d=g-s;if(Math.abs(d)<Wa){var m=s>c?-f:f;n.push([-f,m],[f,m])}else if(Wa>p){var v=l>o?-f:f;n.push([v,-f],[v,f])}else{var m=(l-o)*(g-s)>(h-l)*(s-c)?f:-f,y=Math.abs(d)-p;Math.abs(y)<Wa?n.push([0>d?m:-m,m]):(y>0&&(m*=-1),n.push([-f,m],[f,m]))}}}),i)for(a=0;s>a;++a)i.clip(o[a]);for(a=0;s>a;++a)o[a].point=n[a];return o}var e=Oe,r=Ye,i=null;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.clipExtent=function(n){if(!arguments.length)return i&&[i[0],i[2]];if(null==n)i=null;else{var e=+n[0][0],r=+n[0][1],u=+n[1][0],a=+n[1][1];i=ya.geom.polygon([[e,r],[e,a],[u,a],[u,r]])}return t},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):i&&i[2]},t.links=function(n){var t,i,u,a=n.map(function(){return[]}),o=[],c=ft(e),l=ft(r),s=n.length;if(c===Oe&&l===Ye)t=n;else for(t=new Array(s),u=0;s>u;++u)t[u]=[+c.call(this,i=n[u],u),+l.call(this,i,u)];return fr(t,function(t){var e=t.region.l.index,r=t.region.r.index;a[e][r]||(a[e][r]=a[r][e]=!0,o.push({source:n[e],target:n[r]}))}),o},t.triangles=function(n){if(e===Oe&&r===Ye)return ya.geom.delaunay(n);for(var t,i=new Array(c),u=ft(e),a=ft(r),o=-1,c=n.length;++o<c;)(i[o]=[+u.call(this,t=n[o],o),+a.call(this,t,o)]).data=t;return ya.geom.delaunay(i).map(function(n){return n.map(function(n){return n.data})})},t)};var lc={l:"r",r:"l"};ya.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,a,o){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,s=n.y;if(null!=c)if(Math.abs(c-e)+Math.abs(s-r)<.01)l(n,t,e,r,i,u,a,o);else{var f=n.point;n.x=n.y=n.point=null,l(n,f,c,s,i,u,a,o),l(n,t,e,r,i,u,a,o)}else n.x=e,n.y=r,n.point=t}else l(n,t,e,r,i,u,a,o)}function l(n,t,e,r,i,a,o,c){var l=.5*(i+o),s=.5*(a+c),f=e>=l,h=r>=s,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=pr()),f?i=l:o=l,h?a=s:c=s,u(n,t,e,r,i,a,o,c)}var s,f,h,g,p,d,m,v,y,M=ft(o),x=ft(c);if(null!=t)d=t,m=e,v=r,y=i;else if(v=y=-(d=m=1/0),f=[],h=[],p=n.length,a)for(g=0;p>g;++g)s=n[g],s.x<d&&(d=s.x),s.y<m&&(m=s.y),s.x>v&&(v=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);d>b&&(d=b),m>_&&(m=_),b>v&&(v=b),_>y&&(y=_),f.push(b),h.push(_)}var w=v-d,S=y-m;w>S?y=m+w:v=d+S;var E=pr();if(E.add=function(n){u(E,n,+M(n,++g),+x(n,g),d,m,v,y)},E.visit=function(n){dr(n,E,d,m,v,y)},g=-1,null==t){for(;++g<p;)u(E,n[g],f[g],h[g],d,m,v,y);--g}else n.forEach(E.add);return f=h=n=s=null,E}var a,o=Oe,c=Ye;return(a=arguments.length)?(o=hr,c=gr,3===a&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(o=n,u):o},u.y=function(n){return arguments.length?(c=n,u):c},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ya.interpolateRgb=mr,ya.interpolateObject=vr,ya.interpolateNumber=yr,ya.interpolateString=Mr;var sc=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;ya.interpolate=xr,ya.interpolators=[function(n,t){var e=typeof t;return("string"===e?ao.has(t)||/^(#|rgb\(|hsl\()/.test(t)?mr:Mr:t instanceof F?mr:"object"===e?Array.isArray(t)?br:vr:yr)(n,t)}],ya.interpolateArray=br;var fc=function(){return ht},hc=ya.map({linear:fc,poly:Nr,quad:function(){return Er},cubic:function(){return kr},sin:function(){return qr},exp:function(){return Tr},circle:function(){return Cr},elastic:zr,back:Dr,bounce:function(){return jr}}),gc=ya.map({"in":ht,out:wr,"in-out":Sr,"out-in":function(n){return Sr(wr(n))}});ya.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):"in";return e=hc.get(e)||fc,r=gc.get(r)||ht,_r(r(e.apply(null,Array.prototype.slice.call(arguments,1))))},ya.interpolateHcl=Lr,ya.interpolateHsl=Hr,ya.interpolateLab=Fr,ya.interpolateRound=Pr,ya.transform=function(n){var t=Ma.createElementNS(ya.ns.prefix.svg,"g");return(ya.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Or(e?e.matrix:pc)})(n)},Or.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var pc={a:1,b:0,c:0,d:1,e:0,f:0};ya.interpolateTransform=Ir,ya.layout={},ya.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Zr(n[e]));return t}},ya.layout.chord=function(){function n(){var n,l,f,h,g,p={},d=[],m=ya.range(u),v=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(l=0,g=-1;++g<u;)l+=i[h][g];d.push(l),v.push(ya.range(u)),n+=l}for(a&&m.sort(function(n,t){return a(d[n],d[t])}),o&&v.forEach(function(n,t){n.sort(function(n,e){return o(i[t][n],i[t][e])})}),n=(2*$a-s*u)/n,l=0,h=-1;++h<u;){for(f=l,g=-1;++g<u;){var y=m[h],M=v[y][g],x=i[y][M],b=l,_=l+=x*n;p[y+"-"+M]={index:y,subindex:M,startAngle:b,endAngle:_,value:x}}r[y]={index:y,startAngle:f,endAngle:l,value:(l-f)/n},l+=s}for(h=-1;++h<u;)for(g=h-1;++g<u;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,a,o,c,l={},s=0;return l.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,l):i},l.padding=function(n){return arguments.length?(s=n,e=r=null,l):s},l.sortGroups=function(n){return arguments.length?(a=n,e=r=null,l):a},l.sortSubgroups=function(n){return arguments.length?(o=n,e=null,l):o},l.sortChords=function(n){return arguments.length?(c=n,e&&t(),l):c},l.chords=function(){return e||n(),e},l.groups=function(){return r||n(),r},l},ya.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,a=t.cy-n.y,o=1/Math.sqrt(u*u+a*a);if(d>(i-e)*o){var c=t.charge*o*o;return n.px-=u*c,n.py-=a*c,!0}if(t.point&&isFinite(o)){var c=t.pointCharge*o*o;n.px-=u*c,n.py-=a*c}}return!t.charge}}function t(n){n.px=ya.event.x,n.py=ya.event.y,o.resume()}var e,r,i,u,a,o={},c=ya.dispatch("start","tick","end"),l=[1,1],s=.9,f=dc,h=mc,g=-30,p=.1,d=.8,m=[],v=[];return o.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,o,f,h,d,y,M,x,b=m.length,_=v.length;for(e=0;_>e;++e)o=v[e],f=o.source,h=o.target,M=h.x-f.x,x=h.y-f.y,(d=M*M+x*x)&&(d=r*u[e]*((d=Math.sqrt(d))-i[e])/d,M*=d,x*=d,h.x-=M*(y=f.weight/(h.weight+f.weight)),h.y-=x*y,f.x+=M*(y=1-y),f.y+=x*y);if((y=r*p)&&(M=l[0]/2,x=l[1]/2,e=-1,y))for(;++e<b;)o=m[e],o.x+=(M-o.x)*y,o.y+=(x-o.y)*y;if(g)for(Qr(t=ya.geom.quadtree(m),r,a),e=-1;++e<b;)(o=m[e]).fixed||t.visit(n(o));for(e=-1;++e<b;)o=m[e],o.fixed?(o.x=o.px,o.y=o.py):(o.x-=(o.px-(o.px=o.x))*s,o.y-=(o.py-(o.py=o.y))*s);c.tick({type:"tick",alpha:r})},o.nodes=function(n){return arguments.length?(m=n,o):m},o.links=function(n){return arguments.length?(v=n,o):v},o.size=function(n){return arguments.length?(l=n,o):l},o.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,o):f},o.distance=o.linkDistance,o.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,o):h},o.friction=function(n){return arguments.length?(s=+n,o):s},o.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,o):g},o.gravity=function(n){return arguments.length?(p=+n,o):p},o.theta=function(n){return arguments.length?(d=+n,o):d},o.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),ya.timer(o.tick)),o):r},o.start=function(){function n(n,r){for(var i,u=t(e),a=-1,o=u.length;++a<o;)if(!isNaN(i=u[a][n]))return i;return Math.random()*r}function t(){if(!c){for(c=[],r=0;p>r;++r)c[r]=[];for(r=0;d>r;++r){var n=v[r];c[n.source.index].push(n.target),c[n.target.index].push(n.source)}}return c[e]}var e,r,c,s,p=m.length,d=v.length,y=l[0],M=l[1];for(e=0;p>e;++e)(s=m[e]).index=e,s.weight=0;for(e=0;d>e;++e)s=v[e],"number"==typeof s.source&&(s.source=m[s.source]),"number"==typeof s.target&&(s.target=m[s.target]),++s.source.weight,++s.target.weight;for(e=0;p>e;++e)s=m[e],isNaN(s.x)&&(s.x=n("x",y)),isNaN(s.y)&&(s.y=n("y",M)),isNaN(s.px)&&(s.px=s.x),isNaN(s.py)&&(s.py=s.y);if(i=[],"function"==typeof f)for(e=0;d>e;++e)i[e]=+f.call(this,v[e],e);else for(e=0;d>e;++e)i[e]=f;if(u=[],"function"==typeof h)for(e=0;d>e;++e)u[e]=+h.call(this,v[e],e);else for(e=0;d>e;++e)u[e]=h;if(a=[],"function"==typeof g)for(e=0;p>e;++e)a[e]=+g.call(this,m[e],e);else for(e=0;p>e;++e)a[e]=g;return o.resume()},o.resume=function(){return o.alpha(.1)},o.stop=function(){return o.alpha(0)},o.drag=function(){return e||(e=ya.behavior.drag().origin(ht).on("dragstart.force",Wr).on("drag.force",t).on("dragend.force",Jr)),arguments.length?(this.on("mouseover.force",Gr).on("mouseout.force",Kr).call(e),void 0):e},ya.rebind(o,c,"on")};var dc=20,mc=1;ya.layout.hierarchy=function(){function n(t,a,o){var c=i.call(e,t,a);if(t.depth=a,o.push(t),c&&(l=c.length)){for(var l,s,f=-1,h=t.children=[],g=0,p=a+1;++f<l;)s=n(c[f],p,o),s.parent=t,h.push(s),g+=s.value;r&&h.sort(r),u&&(t.value=g)}else u&&(t.value=+u.call(e,t,a)||0);return t}function t(n,r){var i=n.children,a=0;if(i&&(o=i.length))for(var o,c=-1,l=r+1;++c<o;)a+=t(i[c],l);else u&&(a=+u.call(e,n,r)||0);return u&&(n.value=a),a}function e(t){var e=[];return n(t,0,e),e}var r=ri,i=ti,u=ei;return e.sort=function(n){return arguments.length?(r=n,e):r},e.children=function(n){return arguments.length?(i=n,e):i},e.value=function(n){return arguments.length?(u=n,e):u},e.revalue=function(n){return t(n,0),n},e},ya.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(a=u.length)){var a,o,c,l=-1;for(r=t.value?r/t.value:0;++l<a;)n(o=u[l],e,c=o.value*r,i),e+=c}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var a=r.call(this,e,u);return n(a[0],0,i[0],i[1]/t(a[0])),a}var r=ya.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ni(e,r)},ya.layout.pie=function(){function n(u){var a=u.map(function(e,r){return+t.call(n,e,r)}),o=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof i?i.apply(this,arguments):i)-o)/ya.sum(a),l=ya.range(u.length);null!=e&&l.sort(e===vc?function(n,t){return a[t]-a[n]}:function(n,t){return e(u[n],u[t])});var s=[];return l.forEach(function(n){var t;s[n]={data:u[n],value:t=a[n],startAngle:o,endAngle:o+=t*c}}),s}var t=Number,e=vc,r=0,i=2*$a;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n};var vc={};ya.layout.stack=function(){function n(o,c){var l=o.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),a.call(n,t,e)]})}),f=e.call(n,s,c);l=ya.permute(l,f),s=ya.permute(s,f);var h,g,p,d=r.call(n,s,c),m=l.length,v=l[0].length;for(g=0;v>g;++g)for(i.call(n,l[0][g],p=d[g],s[0][g][1]),h=1;m>h;++h)i.call(n,l[h][g],p+=s[h-1][g][1],s[h][g][1]);return o}var t=ht,e=ci,r=li,i=oi,u=ui,a=ai;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:yc.get(t)||ci,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:Mc.get(t)||li,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(a=t,n):a},n.out=function(t){return arguments.length?(i=t,n):i},n};var yc=ya.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(si),u=n.map(fi),a=ya.range(r).sort(function(n,t){return i[n]-i[t]}),o=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=a[t],c>o?(o+=u[e],l.push(e)):(c+=u[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return ya.range(n.length).reverse()},"default":ci}),Mc=ya.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,a=[],o=0,c=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>o&&(o=r),a.push(r)}for(e=0;u>e;++e)c[e]=(o-a[e])/2;return c},wiggle:function(n){var t,e,r,i,u,a,o,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,i=0;s>t;++t)i+=n[t][e][1];for(t=0,u=0,o=f[e][0]-f[e-1][0];s>t;++t){for(r=0,a=(n[t][e][1]-n[t][e-1][1])/(2*o);t>r;++r)a+=(n[r][e][1]-n[r][e-1][1])/o;u+=a*n[t][e][1]}g[e]=c-=i?u/i*o:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,i=n.length,u=n[0].length,a=1/i,o=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=a}for(e=0;u>e;++e)o[e]=0;return o},zero:li});ya.layout.histogram=function(){function n(n,u){for(var a,o,c=[],l=n.map(e,this),s=r.call(this,l,u),f=i.call(this,s,l,u),u=-1,h=l.length,g=f.length-1,p=t?1:1/h;++u<g;)a=c[u]=[],a.dx=f[u+1]-(a.x=f[u]),a.y=0;if(g>0)for(u=-1;++u<h;)o=l[u],o>=s[0]&&o<=s[1]&&(a=c[ya.bisect(f,o,1,g)-1],a.y+=p,a.push(n[u]));return c}var t=!0,e=Number,r=di,i=gi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=ft(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return pi(n,t)}:ft(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ya.layout.tree=function(){function n(n,u){function a(n,t){var r=n.children,i=n._tree;if(r&&(u=r.length)){for(var u,o,l,s=r[0],f=s,h=-1;++h<u;)l=r[h],a(l,o),f=c(l,o,f),o=l;Si(n);var g=.5*(s._tree.prelim+l._tree.prelim);t?(i.prelim=t._tree.prelim+e(n,t),i.mod=i.prelim-g):i.prelim=g}else t&&(i.prelim=t._tree.prelim+e(n,t))}function o(n,t){n.x=n._tree.prelim+t;var e=n.children;if(e&&(r=e.length)){var r,i=-1;for(t+=n._tree.mod;++i<r;)o(e[i],t)}}function c(n,t,r){if(t){for(var i,u=n,a=n,o=t,c=n.parent.children[0],l=u._tree.mod,s=a._tree.mod,f=o._tree.mod,h=c._tree.mod;o=yi(o),u=vi(u),o&&u;)c=vi(c),a=yi(a),a._tree.ancestor=n,i=o._tree.prelim+f-u._tree.prelim-l+e(o,u),i>0&&(Ei(ki(o,n,r),n,i),l+=i,s+=i),f+=o._tree.mod,l+=u._tree.mod,h+=c._tree.mod,s+=a._tree.mod;o&&!yi(a)&&(a._tree.thread=o,a._tree.mod+=f-s),u&&!vi(c)&&(c._tree.thread=u,c._tree.mod+=l-h,r=n)}return r}var l=t.call(this,n,u),s=l[0];wi(s,function(n,t){n._tree={ancestor:n,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),a(s),o(s,-s._tree.prelim);var f=Mi(s,bi),h=Mi(s,xi),g=Mi(s,_i),p=f.x-e(f,h)/2,d=h.x+e(h,f)/2,m=g.depth||1;return wi(s,i?function(n){n.x*=r[0],n.y=n.depth*r[1],delete n._tree}:function(n){n.x=(n.x-p)/(d-p)*r[0],n.y=n.depth/m*r[1],delete n._tree}),l}var t=ya.layout.hierarchy().sort(null).value(null),e=mi,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ni(n,t)},ya.layout.pack=function(){function n(n,u){var a=e.call(this,n,u),o=a[0],c=i[0],l=i[1],s=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(o.x=o.y=0,wi(o,function(n){n.r=+s(n.value)}),wi(o,Ci),r){var f=r*(t?1:Math.max(2*o.r/c,2*o.r/l))/2;wi(o,function(n){n.r+=f}),wi(o,Ci),wi(o,function(n){n.r-=f})}return ji(o,c/2,l/2,t?1:1/Math.max(2*o.r/c,2*o.r/l)),a}var t,e=ya.layout.hierarchy().sort(Ai),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ni(n,e)},ya.layout.cluster=function(){function n(n,u){var a,o=t.call(this,n,u),c=o[0],l=0;wi(c,function(n){var t=n.children;t&&t.length?(n.x=Fi(t),n.y=Hi(t)):(n.x=a?l+=e(n,a):0,n.y=0,a=n)});var s=Pi(c),f=Oi(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return wi(c,i?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),o}var t=ya.layout.hierarchy().sort(null).value(null),e=mi,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ni(n,t)},ya.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var a,o,c,l=f(e),s=[],h=u.slice(),p=1/0,d="slice"===g?l.dx:"dice"===g?l.dy:"slice-dice"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(a=h[c-1]),s.area+=a.area,"squarify"!==g||(o=r(s,d))<=p?(h.pop(),p=o):(s.area-=s.pop().area,i(s,d,l,!1),d=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(i(s,d,l,!0),s.length=s.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,a=f(t),o=r.slice(),c=[];for(n(o,a.dx*a.dy/t.value),c.area=0;u=o.pop();)c.push(u),c.area+=u.area,null!=u.z&&(i(c,u.z?a.dx:a.dy,a,!o.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,a=-1,o=n.length;++a<o;)(e=n[a].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*p/r,r/(t*u*p)):1/0}function i(n,t,e,r){var i,u=-1,a=n.length,o=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++u<a;)i=n[u],i.x=o,i.y=l,i.dy=s,o+=i.dx=Math.min(e.x+e.dx-o,s?c(i.area/s):0);i.z=!0,i.dx+=e.x+e.dx-o,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);++u<a;)i=n[u],i.x=o,i.y=l,i.dx=s,l+=i.dy=Math.min(e.y+e.dy-l,s?c(i.area/s):0);i.z=!1,i.dy+=e.y+e.dy-l,e.x+=s,e.dx-=s}}function u(r){var i=a||o(r),u=i[0];return u.x=0,u.y=0,u.dx=l[0],u.dy=l[1],a&&o.revalue(u),n([u],u.dx*u.dy/u.value),(a?e:t)(u),h&&(a=i),i}var a,o=ya.layout.hierarchy(),c=Math.round,l=[1,1],s=null,f=Yi,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(l=n,u):l},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Yi(t):Ri(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ri(t,n)}if(!arguments.length)return s;var r;return f=null==(s=n)?Yi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(c=n?Math.round:Number,u):c!=Number},u.sticky=function(n){return arguments.length?(h=n,a=null,u):h},u.ratio=function(n){return arguments.length?(p=n,u):p},u.mode=function(n){return arguments.length?(g=n+"",u):g},ni(u,o)},ya.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ya.random.normal.apply(ya,arguments);return function(){return Math.exp(n())}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t/n}}},ya.scale={};var xc={floor:ht,ceil:ht};ya.scale.linear=function(){return $i([0,1],[0,1],xr,!1)},ya.scale.log=function(){return tu(ya.scale.linear().domain([0,Math.LN10]),10,eu,ru,[1,10])};var bc=ya.format(".0e");ya.scale.pow=function(){return au(ya.scale.linear(),1,[0,1])},ya.scale.sqrt=function(){return ya.scale.pow().exponent(.5)},ya.scale.ordinal=function(){return cu([],{t:"range",a:[[]]})},ya.scale.category10=function(){return ya.scale.ordinal().range(_c)},ya.scale.category20=function(){return ya.scale.ordinal().range(wc)},ya.scale.category20b=function(){return ya.scale.ordinal().range(Sc)},ya.scale.category20c=function(){return ya.scale.ordinal().range(Ec)};var _c=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],wc=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],Sc=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Ec=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];ya.scale.quantile=function(){return lu([],[])},ya.scale.quantize=function(){return su(0,1,[0,1])},ya.scale.threshold=function(){return fu([.5],[0,1])},ya.scale.identity=function(){return hu([0,1])},ya.svg.arc=function(){function n(){var n=t.apply(this,arguments),u=e.apply(this,arguments),a=r.apply(this,arguments)+kc,o=i.apply(this,arguments)+kc,c=(a>o&&(c=a,a=o,o=c),o-a),l=$a>c?"0":"1",s=Math.cos(a),f=Math.sin(a),h=Math.cos(o),g=Math.sin(o);return c>=Ac?n?"M0,"+u+"A"+u+","+u+" 0 1,1 0,"+-u+"A"+u+","+u+" 0 1,1 0,"+u+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+u+"A"+u+","+u+" 0 1,1 0,"+-u+"A"+u+","+u+" 0 1,1 0,"+u+"Z":n?"M"+u*s+","+u*f+"A"+u+","+u+" 0 "+l+",1 "+u*h+","+u*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+l+",0 "+n*s+","+n*f+"Z":"M"+u*s+","+u*f+"A"+u+","+u+" 0 "+l+",1 "+u*h+","+u*g+"L0,0"+"Z"}var t=gu,e=pu,r=du,i=mu;return n.innerRadius=function(e){return arguments.length?(t=ft(e),n):t},n.outerRadius=function(t){return arguments.length?(e=ft(t),n):e},n.startAngle=function(t){return arguments.length?(r=ft(t),n):r},n.endAngle=function(t){return arguments.length?(i=ft(t),n):i},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,u=(r.apply(this,arguments)+i.apply(this,arguments))/2+kc;return[Math.cos(u)*n,Math.sin(u)*n]},n};var kc=-$a/2,Ac=2*$a-1e-6;ya.svg.line.radial=function(){var n=Pe(vu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},Ve.reverse=Xe,Xe.reverse=Ve,ya.svg.area=function(){return yu(ht)},ya.svg.area.radial=function(){var n=yu(vu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ya.svg.chord=function(){function n(n,o){var c=t(this,u,n,o),l=t(this,a,n,o);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?i(c.r,c.p1,c.r,c.p0):i(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+i(l.r,l.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=o.call(n,i,r),a=c.call(n,i,r)+kc,s=l.call(n,i,r)+kc;return{r:u,a0:a,a1:s,p0:[u*Math.cos(a),u*Math.sin(a)],p1:[u*Math.cos(s),u*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>$a)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Ne,a=qe,o=Mu,c=du,l=mu;return n.radius=function(t){return arguments.length?(o=ft(t),n):o},n.source=function(t){return arguments.length?(u=ft(t),n):u},n.target=function(t){return arguments.length?(a=ft(t),n):a},n.startAngle=function(t){return arguments.length?(c=ft(t),n):c},n.endAngle=function(t){return arguments.length?(l=ft(t),n):l},n},ya.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),a=e.call(this,n,i),o=(u.y+a.y)/2,c=[u,{x:u.x,y:o},{x:a.x,y:o},a];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=Ne,e=qe,r=xu;return n.source=function(e){return arguments.length?(t=ft(e),n):t},n.target=function(t){return arguments.length?(e=ft(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ya.svg.diagonal.radial=function(){var n=ya.svg.diagonal(),t=xu,e=n.projection;return n.projection=function(n){return arguments.length?e(bu(t=n)):t},n},ya.svg.symbol=function(){function n(n,r){return(Nc.get(t.call(this,n,r))||Su)(e.call(this,n,r))}var t=wu,e=_u;return n.type=function(e){return arguments.length?(t=ft(e),n):t},n.size=function(t){return arguments.length?(e=ft(t),n):e},n};var Nc=ya.map({circle:Su,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Cc)),e=t*Cc;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Tc),e=t*Tc/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Tc),e=t*Tc/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ya.svg.symbolTypes=Nc.keys();var qc,Tc=Math.sqrt(3),Cc=Math.tan(30*Ga),zc=[],Dc=0,jc={ease:Ar,delay:0,duration:250};zc.call=Fa.call,zc.empty=Fa.empty,zc.node=Fa.node,zc.size=Fa.size,ya.transition=function(n){return arguments.length?qc?n.transition():n:Ya.transition()},ya.transition.prototype=zc,zc.select=function(n){var t,e,r,i=this.id,u=[];n=v(n);for(var a=-1,o=this.length;++a<o;){u.push(t=[]);for(var c=this[a],l=-1,s=c.length;++l<s;)(r=c[l])&&(e=n.call(r,r.__data__,l))?("__data__"in r&&(e.__data__=r.__data__),Nu(e,l,i,r.__transition__[i]),t.push(e)):t.push(null)}return Eu(u,i)},zc.selectAll=function(n){var t,e,r,i,u,a=this.id,o=[];n=y(n);for(var c=-1,l=this.length;++c<l;)for(var s=this[c],f=-1,h=s.length;++f<h;)if(r=s[f]){u=r.__transition__[a],e=n.call(r,r.__data__,f),o.push(t=[]);for(var g=-1,p=e.length;++g<p;)(i=e[g])&&Nu(i,g,a,u),t.push(i)}return Eu(o,a)},zc.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=N(n));for(var u=0,a=this.length;a>u;u++){i.push(t=[]);for(var e=this[u],o=0,c=e.length;c>o;o++)(r=e[o])&&n.call(r,r.__data__,o)&&t.push(r)}return Eu(i,this.id,this.time).ease(this.ease())},zc.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):T(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},zc.attr=function(n,t){function e(){this.removeAttribute(o)}function r(){this.removeAttributeNS(o.space,o.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(o);return e!==n&&(t=a(e,n),function(n){this.setAttribute(o,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(o.space,o.local);return e!==n&&(t=a(e,n),function(n){this.setAttributeNS(o.space,o.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var a="transform"==n?Ir:xr,o=ya.ns.qualify(n);return ku(this,"attr."+n,t,o.local?u:i)},zc.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ya.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},zc.style=function(n,t,e){function r(){this.style.removeProperty(n)}function i(t){return null==t?r:(t+="",function(){var r,i=ba.getComputedStyle(this,null).getPropertyValue(n);return i!==t&&(r=xr(i,t),function(t){this.style.setProperty(n,r(t),e)})})}var u=arguments.length;if(3>u){if("string"!=typeof n){2>u&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return ku(this,"style."+n,t,i)},zc.styleTween=function(n,t,e){function r(r,i){var u=t.call(this,r,i,ba.getComputedStyle(this,null).getPropertyValue(n));return u&&function(t){this.style.setProperty(n,u(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},zc.text=function(n){return ku(this,"text",n,Au)},zc.remove=function(){return this.each("end.transition",function(){var n;!this.__transition__&&(n=this.parentNode)&&n.removeChild(this)})},zc.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=ya.ease.apply(ya,arguments)),T(this,function(e){e.__transition__[t].ease=n}))},zc.delay=function(n){var t=this.id;return T(this,"function"==typeof n?function(e,r,i){e.__transition__[t].delay=0|n.call(e,e.__data__,r,i)}:(n|=0,function(e){e.__transition__[t].delay=n}))},zc.duration=function(n){var t=this.id;return T(this,"function"==typeof n?function(e,r,i){e.__transition__[t].duration=Math.max(1,0|n.call(e,e.__data__,r,i))}:(n=Math.max(1,0|n),function(e){e.__transition__[t].duration=n}))},zc.each=function(n,t){var e=this.id;if(arguments.length<2){var r=jc,i=qc;qc=e,T(this,function(t,r,i){jc=t.__transition__[e],n.call(t,t.__data__,r,i)}),jc=r,qc=i}else T(this,function(r){r.__transition__[e].event.on(n,t)});return this},zc.transition=function(){for(var n,t,e,r,i=this.id,u=++Dc,a=[],o=0,c=this.length;c>o;o++){a.push(n=[]);for(var t=this[o],l=0,s=t.length;s>l;l++)(e=t[l])&&(r=Object.create(e.__transition__[i]),r.delay+=r.duration,Nu(e,l,u,r)),n.push(e)}return Eu(a,u)},ya.svg.axis=function(){function n(n){n.each(function(){var n,f=ya.select(this),h=null==l?e.ticks?e.ticks.apply(e,c):e.domain():l,g=null==t?e.tickFormat?e.tickFormat.apply(e,c):String:t,p=Cu(e,h,s),d=f.selectAll(".tick.minor").data(p,String),m=d.enter().insert("line",".tick").attr("class","tick minor").style("opacity",1e-6),v=ya.transition(d.exit()).style("opacity",1e-6).remove(),y=ya.transition(d).style("opacity",1),M=f.selectAll(".tick.major").data(h,String),x=M.enter().insert("g",".domain").attr("class","tick major").style("opacity",1e-6),b=ya.transition(M.exit()).style("opacity",1e-6).remove(),_=ya.transition(M).style("opacity",1),w=Ii(e),S=f.selectAll(".domain").data([0]),E=(S.enter().append("path").attr("class","domain"),ya.transition(S)),k=e.copy(),A=this.__chart__||k;this.__chart__=k,x.append("line"),x.append("text");var N=x.select("line"),q=_.select("line"),T=M.select("text").text(g),C=x.select("text"),z=_.select("text");
switch(r){case"bottom":n=qu,m.attr("y2",u),y.attr("x2",0).attr("y2",u),N.attr("y2",i),C.attr("y",Math.max(i,0)+o),q.attr("x2",0).attr("y2",i),z.attr("x",0).attr("y",Math.max(i,0)+o),T.attr("dy",".71em").style("text-anchor","middle"),E.attr("d","M"+w[0]+","+a+"V0H"+w[1]+"V"+a);break;case"top":n=qu,m.attr("y2",-u),y.attr("x2",0).attr("y2",-u),N.attr("y2",-i),C.attr("y",-(Math.max(i,0)+o)),q.attr("x2",0).attr("y2",-i),z.attr("x",0).attr("y",-(Math.max(i,0)+o)),T.attr("dy","0em").style("text-anchor","middle"),E.attr("d","M"+w[0]+","+-a+"V0H"+w[1]+"V"+-a);break;case"left":n=Tu,m.attr("x2",-u),y.attr("x2",-u).attr("y2",0),N.attr("x2",-i),C.attr("x",-(Math.max(i,0)+o)),q.attr("x2",-i).attr("y2",0),z.attr("x",-(Math.max(i,0)+o)).attr("y",0),T.attr("dy",".32em").style("text-anchor","end"),E.attr("d","M"+-a+","+w[0]+"H0V"+w[1]+"H"+-a);break;case"right":n=Tu,m.attr("x2",u),y.attr("x2",u).attr("y2",0),N.attr("x2",i),C.attr("x",Math.max(i,0)+o),q.attr("x2",i).attr("y2",0),z.attr("x",Math.max(i,0)+o).attr("y",0),T.attr("dy",".32em").style("text-anchor","start"),E.attr("d","M"+a+","+w[0]+"H0V"+w[1]+"H"+a)}if(e.ticks)x.call(n,A),_.call(n,k),b.call(n,k),m.call(n,A),y.call(n,k),v.call(n,k);else{var D=k.rangeBand()/2,j=function(n){return k(n)+D};x.call(n,j),_.call(n,j)}})}var t,e=ya.scale.linear(),r=Lc,i=6,u=6,a=6,o=3,c=[10],l=null,s=0;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Hc?t+"":Lc,n):r},n.ticks=function(){return arguments.length?(c=arguments,n):c},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t,e){if(!arguments.length)return i;var r=arguments.length-1;return i=+t,u=r>1?+e:i,a=r>0?+arguments[r]:i,n},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(t){return arguments.length?(s=+t,n):s},n};var Lc="bottom",Hc={top:1,right:1,bottom:1,left:1};ya.svg.brush=function(){function n(u){u.each(function(){var u,a=ya.select(this),s=a.selectAll(".background").data([0]),f=a.selectAll(".extent").data([0]),h=a.selectAll(".resize").data(l,String);a.style("pointer-events","all").on("mousedown.brush",i).on("touchstart.brush",i),s.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),f.enter().append("rect").attr("class","extent").style("cursor","move"),h.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Fc[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),h.style("display",n.empty()?"none":null),h.exit().remove(),o&&(u=Ii(o),s.attr("x",u[0]).attr("width",u[1]-u[0]),e(a)),c&&(u=Ii(c),s.attr("y",u[0]).attr("height",u[1]-u[0]),r(a)),t(a)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)][0]+","+s[+/^s/.test(n)][1]+")"})}function e(n){n.select(".extent").attr("x",s[0][0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1][0]-s[0][0])}function r(n){n.select(".extent").attr("y",s[0][1]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",s[1][1]-s[0][1])}function i(){function i(){var n=ya.event.changedTouches;return n?ya.touches(M,n)[0]:ya.mouse(M)}function l(){32==ya.event.keyCode&&(k||(v=null,N[0]-=s[1][0],N[1]-=s[1][1],k=2),g())}function h(){32==ya.event.keyCode&&2==k&&(N[0]+=s[1][0],N[1]+=s[1][1],k=0,g())}function p(){var n=i(),u=!1;y&&(n[0]+=y[0],n[1]+=y[1]),k||(ya.event.altKey?(v||(v=[(s[0][0]+s[1][0])/2,(s[0][1]+s[1][1])/2]),N[0]=s[+(n[0]<v[0])][0],N[1]=s[+(n[1]<v[1])][1]):v=null),S&&d(n,o,0)&&(e(_),u=!0),E&&d(n,c,1)&&(r(_),u=!0),u&&(t(_),b({type:"brush",mode:k?"move":"resize"}))}function d(n,t,e){var r,i,a=Ii(t),o=a[0],c=a[1],l=N[e],h=s[1][e]-s[0][e];return k&&(o-=l,c-=h+l),r=f[e]?Math.max(o,Math.min(c,n[e])):n[e],k?i=(r+=l)+h:(v&&(l=Math.max(o,Math.min(c,2*v[e]-r))),r>l?(i=r,r=l):i=l),s[0][e]!==r||s[1][e]!==i?(u=null,s[0][e]=r,s[1][e]=i,!0):void 0}function m(){p(),_.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ya.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),A(),b({type:"brushend"})}var v,y,M=this,x=ya.select(ya.event.target),b=a.of(M,arguments),_=ya.select(M),w=x.datum(),S=!/^(n|s)$/.test(w)&&o,E=!/^(e|w)$/.test(w)&&c,k=x.classed("extent"),A=L("brush"),N=i(),q=ya.select(ba).on("keydown.brush",l).on("keyup.brush",h);if(ya.event.changedTouches?q.on("touchmove.brush",p).on("touchend.brush",m):q.on("mousemove.brush",p).on("mouseup.brush",m),k)N[0]=s[0][0]-N[0],N[1]=s[0][1]-N[1];else if(w){var T=+/w$/.test(w),C=+/^n/.test(w);y=[s[1-T][0]-N[0],s[1-C][1]-N[1]],N[0]=s[T][0],N[1]=s[C][1]}else ya.event.altKey&&(v=N.slice());_.style("pointer-events","none").selectAll(".resize").style("display",null),ya.select("body").style("cursor",x.style("cursor")),b({type:"brushstart"}),p()}var u,a=d(n,"brushstart","brush","brushend"),o=null,c=null,l=Pc[0],s=[[0,0],[0,0]],f=[!0,!0];return n.x=function(t){return arguments.length?(o=t,l=Pc[!o<<1|!c],n):o},n.y=function(t){return arguments.length?(c=t,l=Pc[!o<<1|!c],n):c},n.clamp=function(t){return arguments.length?(o&&c?f=[!!t[0],!!t[1]]:(o||c)&&(f[+!o]=!!t),n):o&&c?f:o||c?f[+!o]:null},n.extent=function(t){var e,r,i,a,l;return arguments.length?(u=[[0,0],[0,0]],o&&(e=t[0],r=t[1],c&&(e=e[0],r=r[0]),u[0][0]=e,u[1][0]=r,o.invert&&(e=o(e),r=o(r)),e>r&&(l=e,e=r,r=l),s[0][0]=0|e,s[1][0]=0|r),c&&(i=t[0],a=t[1],o&&(i=i[1],a=a[1]),u[0][1]=i,u[1][1]=a,c.invert&&(i=c(i),a=c(a)),i>a&&(l=i,i=a,a=l),s[0][1]=0|i,s[1][1]=0|a),n):(t=u||s,o&&(e=t[0][0],r=t[1][0],u||(e=s[0][0],r=s[1][0],o.invert&&(e=o.invert(e),r=o.invert(r)),e>r&&(l=e,e=r,r=l))),c&&(i=t[0][1],a=t[1][1],u||(i=s[0][1],a=s[1][1],c.invert&&(i=c.invert(i),a=c.invert(a)),i>a&&(l=i,i=a,a=l))),o&&c?[[e,i],[r,a]]:o?[e,r]:c&&[i,a])},n.clear=function(){return u=null,s[0][0]=s[0][1]=s[1][0]=s[1][1]=0,n},n.empty=function(){return o&&s[0][0]===s[1][0]||c&&s[0][1]===s[1][1]},ya.rebind(n,a,"on")};var Fc={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Pc=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];ya.time={};var Oc=Date,Yc=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];zu.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Rc.setUTCDate.apply(this._,arguments)},setDay:function(){Rc.setUTCDay.apply(this._,arguments)},setFullYear:function(){Rc.setUTCFullYear.apply(this._,arguments)},setHours:function(){Rc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Rc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Rc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Rc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Rc.setUTCSeconds.apply(this._,arguments)},setTime:function(){Rc.setTime.apply(this._,arguments)}};var Rc=Date.prototype,Uc="%a %b %e %X %Y",Ic="%m/%d/%Y",Vc="%H:%M:%S",Xc=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Zc=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],Bc=["January","February","March","April","May","June","July","August","September","October","November","December"],$c=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];ya.time.year=Du(function(n){return n=ya.time.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ya.time.years=ya.time.year.range,ya.time.years.utc=ya.time.year.utc.range,ya.time.day=Du(function(n){var t=new Oc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ya.time.days=ya.time.day.range,ya.time.days.utc=ya.time.day.utc.range,ya.time.dayOfYear=function(n){var t=ya.time.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},Yc.forEach(function(n,t){n=n.toLowerCase(),t=7-t;var e=ya.time[n]=Du(function(n){return(n=ya.time.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ya.time.year(n).getDay();return Math.floor((ya.time.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ya.time[n+"s"]=e.range,ya.time[n+"s"].utc=e.utc.range,ya.time[n+"OfYear"]=function(n){var e=ya.time.year(n).getDay();return Math.floor((ya.time.dayOfYear(n)+(e+t)%7)/7)}}),ya.time.week=ya.time.sunday,ya.time.weeks=ya.time.sunday.range,ya.time.weeks.utc=ya.time.sunday.utc.range,ya.time.weekOfYear=ya.time.sundayOfYear,ya.time.format=function(n){function t(t){for(var r,i,u,a=[],o=-1,c=0;++o<e;)37===n.charCodeAt(o)&&(a.push(n.substring(c,o)),null!=(i=il[r=n.charAt(++o)])&&(r=n.charAt(++o)),(u=ul[r])&&(r=u(t,null==i?"e"===r?" ":"0":i)),a.push(r),c=o+1);return a.push(n.substring(c,o)),a.join("")}var e=n.length;return t.parse=function(t){var e={y:1900,m:0,d:1,H:0,M:0,S:0,L:0},r=Lu(e,n,t,0);if(r!=t.length)return null;"p"in e&&(e.H=e.H%12+12*e.p);var i=new Oc;return"j"in e?i.setFullYear(e.y,0,e.j):"w"in e&&("W"in e||"U"in e)?(i.setFullYear(e.y,0,1),i.setFullYear(e.y,0,"W"in e?(e.w+6)%7+7*e.W-(i.getDay()+5)%7:e.w+7*e.U-(i.getDay()+6)%7)):i.setFullYear(e.y,e.m,e.d),i.setHours(e.H,e.M,e.S,e.L),i},t.toString=function(){return n},t};var Wc=Hu(Xc),Jc=Fu(Xc),Gc=Hu(Zc),Kc=Fu(Zc),Qc=Hu(Bc),nl=Fu(Bc),tl=Hu($c),el=Fu($c),rl=/^%/,il={"-":"",_:" ",0:"0"},ul={a:function(n){return Zc[n.getDay()]},A:function(n){return Xc[n.getDay()]},b:function(n){return $c[n.getMonth()]},B:function(n){return Bc[n.getMonth()]},c:ya.time.format(Uc),d:function(n,t){return Pu(n.getDate(),t,2)},e:function(n,t){return Pu(n.getDate(),t,2)},H:function(n,t){return Pu(n.getHours(),t,2)},I:function(n,t){return Pu(n.getHours()%12||12,t,2)},j:function(n,t){return Pu(1+ya.time.dayOfYear(n),t,3)},L:function(n,t){return Pu(n.getMilliseconds(),t,3)},m:function(n,t){return Pu(n.getMonth()+1,t,2)},M:function(n,t){return Pu(n.getMinutes(),t,2)},p:function(n){return n.getHours()>=12?"PM":"AM"},S:function(n,t){return Pu(n.getSeconds(),t,2)},U:function(n,t){return Pu(ya.time.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Pu(ya.time.mondayOfYear(n),t,2)},x:ya.time.format(Ic),X:ya.time.format(Vc),y:function(n,t){return Pu(n.getFullYear()%100,t,2)},Y:function(n,t){return Pu(n.getFullYear()%1e4,t,4)},Z:aa,"%":function(){return"%"}},al={a:Ou,A:Yu,b:Vu,B:Xu,c:Zu,d:Qu,e:Qu,H:ta,I:ta,j:na,L:ia,m:Ku,M:ea,p:ua,S:ra,U:Uu,w:Ru,W:Iu,x:Bu,X:$u,y:Ju,Y:Wu,"%":oa},ol=/^\s*\d+/,cl=ya.map({am:0,pm:1});ya.time.format.utc=function(n){function t(n){try{Oc=zu;var t=new Oc;return t._=n,e(t)}finally{Oc=Date}}var e=ya.time.format(n);return t.parse=function(n){try{Oc=zu;var t=e.parse(n);return t&&t._}finally{Oc=Date}},t.toString=e.toString,t};var ll=ya.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");ya.time.format.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?ca:ll,ca.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},ca.toString=ll.toString,ya.time.second=Du(function(n){return new Oc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ya.time.seconds=ya.time.second.range,ya.time.seconds.utc=ya.time.second.utc.range,ya.time.minute=Du(function(n){return new Oc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ya.time.minutes=ya.time.minute.range,ya.time.minutes.utc=ya.time.minute.utc.range,ya.time.hour=Du(function(n){var t=n.getTimezoneOffset()/60;return new Oc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ya.time.hours=ya.time.hour.range,ya.time.hours.utc=ya.time.hour.utc.range,ya.time.month=Du(function(n){return n=ya.time.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ya.time.months=ya.time.month.range,ya.time.months.utc=ya.time.month.utc.range;var sl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],fl=[[ya.time.second,1],[ya.time.second,5],[ya.time.second,15],[ya.time.second,30],[ya.time.minute,1],[ya.time.minute,5],[ya.time.minute,15],[ya.time.minute,30],[ya.time.hour,1],[ya.time.hour,3],[ya.time.hour,6],[ya.time.hour,12],[ya.time.day,1],[ya.time.day,2],[ya.time.week,1],[ya.time.month,1],[ya.time.month,3],[ya.time.year,1]],hl=[[ya.time.format("%Y"),Rt],[ya.time.format("%B"),function(n){return n.getMonth()}],[ya.time.format("%b %d"),function(n){return 1!=n.getDate()}],[ya.time.format("%a %d"),function(n){return n.getDay()&&1!=n.getDate()}],[ya.time.format("%I %p"),function(n){return n.getHours()}],[ya.time.format("%I:%M"),function(n){return n.getMinutes()}],[ya.time.format(":%S"),function(n){return n.getSeconds()}],[ya.time.format(".%L"),function(n){return n.getMilliseconds()}]],gl=ya.scale.linear(),pl=fa(hl);fl.year=function(n,t){return gl.domain(n.map(ga)).ticks(t).map(ha)},ya.time.scale=function(){return la(ya.scale.linear(),fl,pl)};var dl=fl.map(function(n){return[n[0].utc,n[1]]}),ml=[[ya.time.format.utc("%Y"),Rt],[ya.time.format.utc("%B"),function(n){return n.getUTCMonth()}],[ya.time.format.utc("%b %d"),function(n){return 1!=n.getUTCDate()}],[ya.time.format.utc("%a %d"),function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],[ya.time.format.utc("%I %p"),function(n){return n.getUTCHours()}],[ya.time.format.utc("%I:%M"),function(n){return n.getUTCMinutes()}],[ya.time.format.utc(":%S"),function(n){return n.getUTCSeconds()}],[ya.time.format.utc(".%L"),function(n){return n.getUTCMilliseconds()}]],vl=fa(ml);return dl.year=function(n,t){return gl.domain(n.map(da)).ticks(t).map(pa)},ya.time.scale.utc=function(){return la(ya.scale.linear(),dl,vl)},ya.text=gt(function(n){return n.responseText}),ya.json=function(n,t){return pt(n,"application/json",ma,t)},ya.html=function(n,t){return pt(n,"text/html",va,t)},ya.xml=gt(function(n){return n.responseXML}),ya}();
[
{
"date": "4/1854",
"army_size": 8571,
"disease": 1,
"wounds": 0,
"other": 5
},
{
"date": "5/1854",
"army_size": 23333,
"disease": 12,
"wounds": 0,
"other": 9
},
{
"date": "6/1854",
"army_size": 28333,
"disease": 11,
"wounds": 0,
"other": 6
},
{
"date": "7/1854",
"army_size": 28722,
"disease": 359,
"wounds": 0,
"other": 23
},
{
"date": "8/1854",
"army_size": 30246,
"disease": 828,
"wounds": 1,
"other": 30
},
{
"date": "9/1854",
"army_size": 30290,
"disease": 788,
"wounds": 81,
"other": 70
},
{
"date": "10/1854",
"army_size": 30643,
"disease": 503,
"wounds": 132,
"other": 128
},
{
"date": "11/1854",
"army_size": 29736,
"disease": 844,
"wounds": 287,
"other": 106
},
{
"date": "12/1854",
"army_size": 32779,
"disease": 1725,
"wounds": 114,
"other": 131
},
{
"date": "1/1855",
"army_size": 32393,
"disease": 2761,
"wounds": 83,
"other": 324
},
{
"date": "2/1855",
"army_size": 30919,
"disease": 2120,
"wounds": 42,
"other": 361
},
{
"date": "3/1855",
"army_size": 30107,
"disease": 1205,
"wounds": 32,
"other": 172
},
{
"date": "4/1855",
"army_size": 32252,
"disease": 477,
"wounds": 48,
"other": 57
},
{
"date": "5/1855",
"army_size": 35473,
"disease": 508,
"wounds": 49,
"other": 37
},
{
"date": "6/1855",
"army_size": 38863,
"disease": 802,
"wounds": 209,
"other": 31
},
{
"date": "7/1855",
"army_size": 42647,
"disease": 382,
"wounds": 134,
"other": 33
},
{
"date": "8/1855",
"army_size": 44614,
"disease": 483,
"wounds": 164,
"other": 25
},
{
"date": "9/1855",
"army_size": 47751,
"disease": 189,
"wounds": 276,
"other": 20
},
{
"date": "10/1855",
"army_size": 46852,
"disease": 128,
"wounds": 53,
"other": 18
},
{
"date": "11/1855",
"army_size": 37853,
"disease": 178,
"wounds": 33,
"other": 32
},
{
"date": "12/1855",
"army_size": 43217,
"disease": 91,
"wounds": 18,
"other": 28
},
{
"date": "1/1856",
"army_size": 44212,
"disease": 42,
"wounds": 2,
"other": 48
},
{
"date": "2/1856",
"army_size": 43485,
"disease": 24,
"wounds": 0,
"other": 19
},
{
"date": "3/1856",
"army_size": 46140,
"disease": 15,
"wounds": 0,
"other": 35
}
]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Nightingale and the Crimean War</title>
<!-- Stylesheets -->
<link href='http://fonts.googleapis.com/css?family=Cabin:500' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="reset.css">
<link rel="stylesheet" type="text/css" href="style.css">
<!-- Libraries -->
<script type="text/javascript" src="d3.min.js"></script>
<!-- Scripts -->
<script type="text/javascript" src="script.js"></script>
</head>
<body class="clearfix">
<!--<h1>Nightingale and the Crimean War</h1>-->
<script type="text/javascript">
var line = Chart.line(),
stackedArea = Chart.stackedArea(),
stackedBar = Chart.stackedBar(),
groupedBar = Chart.groupedBar(),
multiplePie = Chart.multiplePie(),
multipleDonut = Chart.multipleDonut(),
height = 400,
format = d3.time.format('%m/%Y'),
causes = ['other', 'wounds', 'disease'],
xLabel = 'April 1854 - March 1856',
yLabel = 'Annual Rate of Mortality per 1000',
yTicks = 5,
dataLayers;
// Add a title:
d3.select('body').append('h2')
.attr('class', 'title')
.html( 'Diagrams <span class="small">of the</span> Causes <span class="small">of</span> Mortality <span class="small">in the</span> Army <span class="small">of the</span> East');
// Load the JSON data:
d3.json( 'data.json', function( data ) {
// Data from: http://ocp.hul.harvard.edu/dl/contagion/010164675
// Format the date and rework the data:
var scalar;
data.forEach( function(d) {
d.date = format.parse(d.date);
// Calculate the average annual mortality, as done by Nightingale:
// http://understandinguncertainty.org/node/214
scalar = 1000*12 / d.army_size;
d.disease = d.disease * scalar;
d.wounds = d.wounds * scalar;
d.other = d.other * scalar;
} );
// Format the data in terms of layers (by cause):
dataLayers = causes.map( function(cause) {
return data.map( function(d) {
return {
'x': d.date,
'y': d[cause],
'label': cause
};
});
});
// STACKED BAR CHART //
// Append a new figure to the DOM:
figure = d3.select( 'body' )
.append( 'figure' )
.attr('class', 'chart half');
// Get the figure width:
width = parseInt( figure.style( 'width' ), 10 );
// Update the chart generator settings:
stackedBar.legend( causes )
.width( width )
.height( height )
.xDomain( dataLayers[0].map( function(d) { return d.x; } ) )
.xScale( d3.scale.ordinal() )
.xLabel( xLabel )
.yTicks( yTicks )
.yLabel( yLabel );
// Bind the data and generate a new chart:
figure.datum( dataLayers )
.call( stackedBar );
// GROUPED BAR CHART //
// Append a new figure to the DOM:
figure = d3.select( 'body' )
.append( 'figure' )
.attr('class', 'chart half');
// Get the figure width:
width = parseInt( figure.style( 'width' ), 10 );
// Update the chart generator settings:
groupedBar.legend( causes )
.width( width )
.height( height )
.xDomain( dataLayers[0].map( function(d) { return d.x; } ) )
.xScale( d3.scale.ordinal() )
.xLabel( xLabel )
.yTicks( yTicks )
.yLabel( yLabel );
// Bind the data and generate a new chart:
figure.datum( dataLayers )
.call( groupedBar );
// STACKED AREA CHART //
// Append a new figure to the DOM:
figure = d3.select( 'body' )
.append( 'figure' )
.attr('class', 'chart half');
// Get the figure width:
width = parseInt( figure.style( 'width' ), 10 );
// Update the chart generator settings:
stackedArea.legend( causes )
.width( width )
.height( height )
.xScale( d3.time.scale() )
.xLabel( xLabel )
.yTicks( yTicks )
.yLabel( yLabel );
// Bind the data and generate a new chart:
figure.datum( dataLayers )
.call( stackedArea );
// LINE CHART //
// Append a new figure to the DOM:
figure = d3.select( 'body' )
.append( 'figure' )
.attr('class', 'chart half');
// Get the figure width:
width = parseInt( figure.style( 'width' ), 10 );
// Update the chart generator settings:
line.legend( causes )
.width( width )
.height( height )
.xScale( d3.time.scale() )
.xLabel( xLabel )
.yTicks( yTicks )
.yLabel( yLabel );
// Bind the data and generate a new chart:
figure.datum( dataLayers )
.call( line );
// MULTIPLE PIES //
// Prepare the data:
var _data = data.map( function(d) {
var sum = d.disease + d.wounds + d.other,
radius = Math.sqrt(sum / Math.PI);
return {
'labels': ['disease', 'wounds', 'other'],
'r': radius,
'x': d3.time.format('%b')(d.date),
'values': [d.disease, d.wounds, d.other]
};
});
// Append a new figure to the DOM:
figure = d3.select( 'body' )
.append( 'figure' )
.attr('class', 'chart half');
// Get the figure width:
width = parseInt( figure.style( 'width' ), 10 );
// Update the chart generator settings:
multiplePie.legend( ['disease', 'wounds', 'other'] )
.width( width )
.height( 600 )
.xLabel( xLabel )
.rDomain( [0, d3.max( _data, function(d) { return d.r; })] );
// Bind the data and generate a new chart:
figure.datum( _data )
.call( multiplePie );
// MULTIPLE DONUTS //
// Append a new figure to the DOM:
figure = d3.select( 'body' )
.append( 'figure' )
.attr('class', 'chart half');
// Get the figure width:
width = parseInt( figure.style( 'width' ), 10 );
// Update the chart generator settings:
multipleDonut.legend( ['disease', 'wounds', 'other'] )
.width( width )
.height( 600 )
.xLabel( xLabel )
.rDomain( [0, d3.max( _data, function(d) { return d.r; })] );
// Bind the data and generate a new chart:
figure.datum( _data )
.call( multipleDonut );
});
</script>
</body>
</html>
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
/**
*
*
*
* NOTES:
* [1] Stacked bar and others are not strictly general as they assume ordinal scales.
* [2] For donut and pie multiples, should auto-calculate the canvas height
*
*
* @author Kristofer Gryte. http://www.kgryte.com
*
*
*/
var Chart = {};
Chart.line = function() {
var margin = {'top': 20, 'right': 20, 'bottom': 50, 'left': 80},
height = 300,
width = 760,
xLabel = 'x',
yLabel = 'y',
xTicks, yTicks,
legend = [''],
xValue = function(d) { return d.x; },
yValue = function(d) { return d.y; },
label = function(d) { return d.label; },
xScale = d3.scale.linear(),
yScale = d3.scale.linear(),
xAxis = d3.svg.axis().scale( xScale ).orient( 'bottom' ),
yAxis = d3.svg.axis().scale( yScale ).orient( 'left' ),
xDomain, yDomain,
interpolation = 'basis',
line = d3.svg.line().x( X ).y( Y ).interpolate( interpolation ),
canvas, graph, dataset, lines;
// Stack generator:
var stack = d3.layout.stack();
function chart( selection ) {
selection.each( function( data ) {
// Standardize the data:
data = formatData( data );
// Update the chart parameters:
updateParams( data );
// Create the chart base:
createBase( this );
// Create the lines:
createLines( data );
// Create the axes:
createAxes();
});
}; // end FUNCTION chart()
function formatData( data ) {
// Convert data to standard representation; needed for non-deterministic accessors:
data = d3.range(data.length).map( function(id) {
return data[id].map( function(d, i) {
return {
'x': xValue.call(data[id], d, i),
'y': yValue.call(data[id], d, i),
'label': label.call(data[id], d, i)
};
});
});
// Stackify our data: (NOTE: this is not necessary. We do so here to be consistent with other graphs.)
data = stack( data );
return data;
}; // end FUNCTION formatData()
function updateParams( data ) {
if (!xDomain) {
var xMin = d3.min(data, function(dataset) {
return d3.min( dataset, function(d) {
return d.x;
});
});
var xMax = d3.max(data, function(dataset) {
return d3.max( dataset, function(d) {
return d.x;
});
});
xDomain = [xMin, xMax];
};
if (!yDomain) {
var yMin = 0,
yMax = d3.max(data, function(dataset) {
return d3.max( dataset, function(d) {
return d.y + d.y0;
});
});
yDomain = [yMin, yMax];
};
if (yTicks) {
yAxis.ticks( yTicks );
};
// Update the x-scale:
xScale
.domain( xDomain )
.range( [0, width - margin.left - margin.right] );
// Update the y-scale:
yScale
.domain( yDomain )
.range( [height - margin.top - margin.bottom, 0]);
}; // end FUNCTION updateParams()
function createBase( selection ) {
// Create the SVG element:
canvas = d3.select( selection ).append('svg:svg')
.attr('width', width)
.attr('height', height)
.attr('class', 'canvas');
// Create the graph element:
graph = canvas.append('svg:g')
.attr('class', 'graph')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
}; // end FUNCTION createBase()
function createLines( data ) {
// Create the dataset group:
dataset = graph.append('svg:g')
.attr('class', 'dataset');
// Add a rectangle for each date:
lines = dataset.selectAll('.line')
.data( data )
.enter().append('svg:path')
.attr('class', function(d,i) { return 'line ' + d[0].label; })
.attr('d', line);
// Add tooltips:
lines.append('svg:title')
.text( function(d) { return d[0].label; } );
}; // end FUNCTION createLines()
function createAxes() {
graph.append('svg:g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + (yScale.range()[0]) + ')')
.call( xAxis );
graph.select('.x.axis')
.append('svg:text')
.attr('y', 40)
.attr('x', (width - margin.left - margin.right)/ 2)
.attr('text-anchor', 'middle')
.attr('class', 'label')
.text( xLabel );
graph.append('svg:g')
.attr('class', 'y axis')
.call( yAxis )
.append('svg:text')
.attr('transform', 'rotate(-90)')
.attr('y', -64)
.attr('x', -yScale.range()[0] / 2)
.attr('text-anchor', 'middle')
.attr('class', 'label')
.text( yLabel );
}; // end FUNCTION createAxes()
// x-accessor:
function X(d) {
return xScale( d.x );
};
// y-accessor:
function Y(d) {
return yScale( d.y );
};
// Set/Get: margin
chart.margin = function( _ ) {
if (!arguments.length) return margin;
margin = _;
return chart;
};
// Set/Get: width
chart.width = function( _ ) {
if (!arguments.length) return width;
width = _;
return chart;
};
// Set/Get: height
chart.height = function( _ ) {
if (!arguments.length) return height;
height = _;
return chart;
};
// Set/Get: x
chart.x = function( _ ) {
if (!arguments.length) return xValue;
xValue = _;
return chart;
};
// Set/Get: y
chart.y = function( _ ) {
if (!arguments.length) return yValue;
yValue = _;
return chart;
};
// Set/Get: xLabel
chart.xLabel = function( _ ) {
if (!arguments.length) return xLabel;
xLabel = _;
return chart;
};
// Set/Get: yLabel
chart.yLabel = function( _ ) {
if (!arguments.length) return yLabel;
yLabel = _;
return chart;
};
// Set/Get: legend
chart.legend = function( _ ) {
if (!arguments.length) return legend;
legend = _;
return chart;
};
// Set/Get: interpolation
chart.interpolation = function( _ ) {
if (!arguments.length) return interpolation;
interpolation = _;
line.interpolate( interpolation );
return chart;
};
// Set/Get: xScale
chart.xScale = function( _ ) {
if (!arguments.length) return xScale;
xScale = _;
xAxis.scale( xScale );
return chart;
};
// Set/Get: xDomain
chart.xDomain = function( _ ) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
// Set/Get: yDomain
chart.yDomain = function( _ ) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
// Set/Get: xTicks
chart.xTicks = function( _ ) {
if (!arguments.length) return xTicks;
xTicks = _;
return chart;
};
// Set/Get: yTicks
chart.yTicks = function( _ ) {
if (!arguments.length) return yTicks;
yTicks = _;
return chart;
};
return chart;
}; // end FUNCTION line()
Chart.stackedArea = function() {
var margin = {'top': 20, 'right': 20, 'bottom': 50, 'left': 80},
height = 300,
width = 760,
xLabel = 'x',
yLabel = 'y',
xTicks, yTicks,
legend = [''],
xValue = function(d) { return d.x; },
yValue = function(d) { return d.y; },
label = function(d) { return d.label; },
xScale = d3.scale.linear(),
yScale = d3.scale.linear(),
xAxis = d3.svg.axis().scale( xScale ).orient( 'bottom' ),
yAxis = d3.svg.axis().scale( yScale ).orient( 'left' ),
xDomain, yDomain,
interpolation = 'basis',
canvas, graph, dataset, lines;
// Area generator:
var area = d3.svg.area()
.x( X )
.y0( function(d) { return yScale(d.y0); } )
.y1( function(d) { return yScale(d.y0 + d.y); } )
.interpolate( interpolation );
// Stack generator:
var stack = d3.layout.stack();
function chart( selection ) {
selection.each( function( data ) {
// Standardize the data:
data = formatData( data );
// Update the chart parameters:
updateParams( data );
// Create the chart base:
createBase( this );
// Create the paths:
createPaths( data );
// Create the axes:
createAxes();
});
}; // end FUNCTION chart()
function formatData( data ) {
// Convert data to standard representation; needed for non-deterministic accessors:
data = d3.range(data.length).map( function(id) {
return data[id].map( function(d, i) {
return {
'x': xValue.call(data[id], d, i),
'y': yValue.call(data[id], d, i),
'label': label.call(data[id], d, i)
};
});
});
// Stackify the data:
data = stack( data );
return data;
}; // end FUNCTION formatData()
function updateParams( data ) {
if (!xDomain) {
var xMin = d3.min(data, function(dataset) {
return d3.min( dataset, function(d) {
return d.x;
});
});
var xMax = d3.max(data, function(dataset) {
return d3.max( dataset, function(d) {
return d.x;
});
});
xDomain = [xMin, xMax];
};
if (!yDomain) {
var yMin = 0,
yMax = d3.max(data, function(dataset) {
return d3.max( dataset, function(d) {
return d.y + d.y0;
});
});
yDomain = [yMin, yMax];
};
if (yTicks) {
yAxis.ticks( yTicks );
};
// Update the x-scale:
xScale
.domain( xDomain )
.range( [0, width - margin.left - margin.right] );
// Update the y-scale:
yScale
.domain( yDomain )
.range( [height - margin.top - margin.bottom, 0]);
}; // end FUNCTION updateParams()
function createBase( selection ) {
// Create the SVG element:
canvas = d3.select( selection ).append('svg:svg')
.attr('width', width)
.attr('height', height)
.attr('class', 'canvas');
// Create the graph element:
graph = canvas.append('svg:g')
.attr('class', 'graph')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
}; // end FUNCTION createBase()
function createPaths( data ) {
// Create the dataset group:
dataset = graph.append('svg:g')
.attr('class', 'dataset');
// Add a rectangle for each date:
lines = dataset.selectAll('.area')
.data( data )
.enter().append('svg:path')
.attr('class', function(d,i) { return 'area ' + d[0].label; })
.attr('d', area);
// Add tooltips:
lines.append('svg:title')
.text( function(d) { return d[0].label; } );
}; // end FUNCTION createPaths()
function createAxes() {
graph.append('svg:g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + (yScale.range()[0]) + ')')
.call( xAxis );
graph.select('.x.axis')
.append('svg:text')
.attr('y', 40)
.attr('x', (width - margin.left - margin.right)/ 2)
.attr('text-anchor', 'middle')
.attr('class', 'label')
.text( xLabel );
graph.append('svg:g')
.attr('class', 'y axis')
.call( yAxis )
.append('svg:text')
.attr('transform', 'rotate(-90)')
.attr('y', -64)
.attr('x', -yScale.range()[0] / 2)
.attr('text-anchor', 'middle')
.attr('class', 'label')
.text( yLabel );
}; // end FUNCTION createAxes()
// x-accessor:
function X(d) {
return xScale( d.x );
};
// y-accessor:
function Y(d) {
return yScale( d.y );
};
// Set/Get: margin
chart.margin = function( _ ) {
if (!arguments.length) return margin;
margin = _;
return chart;
};
// Set/Get: width
chart.width = function( _ ) {
if (!arguments.length) return width;
width = _;
return chart;
};
// Set/Get: height
chart.height = function( _ ) {
if (!arguments.length) return height;
height = _;
return chart;
};
// Set/Get: x
chart.x = function( _ ) {
if (!arguments.length) return xValue;
xValue = _;
return chart;
};
// Set/Get: y
chart.y = function( _ ) {
if (!arguments.length) return yValue;
yValue = _;
return chart;
};
// Set/Get: xLabel
chart.xLabel = function( _ ) {
if (!arguments.length) return xLabel;
xLabel = _;
return chart;
};
// Set/Get: yLabel
chart.yLabel = function( _ ) {
if (!arguments.length) return yLabel;
yLabel = _;
return chart;
};
// Set/Get: legend
chart.legend = function( _ ) {
if (!arguments.length) return legend;
legend = _;
return chart;
};
// Set/Get: interpolation
chart.interpolation = function( _ ) {
if (!arguments.length) return interpolation;
interpolation = _;
line.interpolate( interpolation );
return chart;
};
// Set/Get: xScale
chart.xScale = function( _ ) {
if (!arguments.length) return xScale;
xScale = _;
xAxis.scale( xScale );
return chart;
};
// Set/Get: xDomain
chart.xDomain = function( _ ) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
// Set/Get: yDomain
chart.yDomain = function( _ ) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
// Set/Get: xTicks
chart.xTicks = function( _ ) {
if (!arguments.length) return xTicks;
xTicks = _;
return chart;
};
// Set/Get: yTicks
chart.yTicks = function( _ ) {
if (!arguments.length) return yTicks;
yTicks = _;
return chart;
};
return chart;
}; // end FUNCTION stackedArea()
Chart.groupedBar = function() {
var margin = {'top': 20, 'right': 20, 'bottom': 100, 'left': 80},
height = 400,
width = 760,
xLabel = 'x',
yLabel = 'y',
legend = [''],
xValue = function(d) { return d.x; },
yValue = function(d) { return d.y; },
label = function(d) { return d.label; },
xScale = d3.scale.linear(),
yScale = d3.scale.linear(),
yTicks,
xTickLabels,
xAxis = d3.svg.axis().scale( xScale ).orient( 'bottom' ),
yAxis = d3.svg.axis().scale( yScale ).orient( 'left' ),
xDomain, yDomain,
canvas, graph, dataset, rect;
// Stack layout generator:
var stack = d3.layout.stack();
function chart( selection ) {
selection.each( function( data ) {
// Standardize the data:
data = formatData( data );
// Update the chart parameters:
updateParams( data );
// Create the chart base:
createBase( this );
// Create the Columns:
createColumns( data );
// Create the axes:
createAxes();
});
}; // end FUNCTION chart()
function formatData( data ) {
// Convert data to standard representation; needed for non-deterministic accessors:
data = d3.range(data.length).map( function(id) {
return data[id].map( function(d, i) {
return {
'x': xValue.call(data[id], d, i),
'y': yValue.call(data[id], d, i),
'label': label.call(data[id], d, i)
};
});
});
// Stackify the data:
data = stack( data );
return data;
}; // end FUNCTION formatData()
function updateParams( data ) {
if (!xDomain) {
var xMin = d3.min(data, function(dataset) {
return d3.min( dataset, function(d) {
return d.x;
});
});
var xMax = d3.max(data, function(dataset) {
return d3.max( dataset, function(d) {
return d.x;
});
});
xDomain = [xMin, xMax];
};
if (!yDomain) {
var yMin = 0,
yMax = d3.max(data, function(dataset) {
return d3.max( dataset, function(d) {
return d.y + d.y0;
});
});
yDomain = [yMin, yMax];
};
if (yTicks) {
yAxis.ticks( yTicks );
};
// Update the x-scale:
xScale
.domain( xDomain )
.rangeRoundBands( [0, width - margin.left - margin.right] );
// Update the y-scale:
yScale
.domain( yDomain )
.range( [height - margin.top - margin.bottom, 0]);
}; // end FUNCTION updateParams()
function createBase( selection ) {
// Create the SVG element:
canvas = d3.select( selection ).append('svg:svg')
.attr('width', width)
.attr('height', height)
.attr('class', 'canvas');
// Create the graph element:
graph = canvas.append('svg:g')
.attr('class', 'graph')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
}; // end FUNCTION createBase()
function createColumns( data ) {
// Add a group for each dataset:
dataset = graph.selectAll('.dataset')
.data( data )
.enter().append('svg:g')
.attr('class', 'dataset');
// Add a rectangle for each date:
rect = dataset.selectAll('.rect')
.data( function(d) { return d;} )
.enter().append('svg:rect')
.attr('class', function(d,i) { return 'rect ' + d.label; })
.attr('x', function(d,i,j) { return X(d) + xScale.rangeBand() / data.length * j; })
.attr('y', function(d) { return Y(d); })
.attr('height', function(d) { return height - margin.bottom - margin.top - Y(d); })
.attr('width', xScale.rangeBand() / data.length );
// Add tooltips:
rect.append('svg:title')
.text( function(d) { return Math.round(d.y); } );
}; // end FUNCTION createColumns()
function createAxes() {
xTickLabels = graph.append('svg:g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + (height - margin.bottom) + ')')
.selectAll('.label')
.data( xScale.domain() )
.enter().append('svg:text')
.attr('class', 'label')
.attr('x', function(d) { return xScale(d) + xScale.rangeBand()/2; })
.attr('y', -5)
.attr('text-anchor', 'middle')
.attr('dy', '.71em')
.text( d3.time.format("%b") );
graph.select('.x.axis')
.append('svg:text')
.attr('y', 40)
.attr('x', (width - margin.left - margin.right)/ 2)
.attr('text-anchor', 'middle')
.attr('class', 'label')
.text( xLabel );
graph.append('svg:g')
.attr('class', 'y axis')
.call( yAxis )
.append('svg:text')
.attr('transform', 'rotate(-90)')
.attr('y', -64)
.attr('x', -yScale.range()[0] / 2)
.attr('text-anchor', 'middle')
.attr('class', 'label')
.text( yLabel );
}; // end FUNCTION createAxes()
function X(d) {
return xScale( d.x );
};
function Y(d) {
return yScale( d.y );
};
// Set/Get: margin
chart.margin = function( _ ) {
if (!arguments.length) return margin;
margin = _;
return chart;
};
// Set/Get: width
chart.width = function( _ ) {
if (!arguments.length) return width;
width = _;
return chart;
};
// Set/Get: height
chart.height = function( _ ) {
if (!arguments.length) return height;
height = _;
return chart;
};
// Set/Get: x
chart.x = function( _ ) {
if (!arguments.length) return xValue;
xValue = _;
return chart;
};
// Set/Get: y
chart.y = function( _ ) {
if (!arguments.length) return yValue;
yValue = _;
return chart;
};
// Set/Get: label
chart.label = function( _ ) {
if (!arguments.length) return label;
label = _;
return chart;
};
// Set/Get: legend
chart.legend = function( _ ) {
if (!arguments.length) return legend;
legend = _;
return chart;
};
// Set/Get: xLabel
chart.xLabel = function( _ ) {
if (!arguments.length) return xLabel;
xLabel = _;
return chart;
};
// Set/Get: yLabel
chart.yLabel = function( _ ) {
if (!arguments.length) return yLabel;
yLabel = _;
return chart;
};
// Set/Get: xScale
chart.xScale = function( _ ) {
if (!arguments.length) return xScale;
xScale = _;
xAxis.scale( xScale );
return chart;
};
// Set/Get: xDomain
chart.xDomain = function( _ ) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
// Set/Get: yDomain
chart.yDomain = function( _ ) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
// Set/Get: yTicks
chart.yTicks = function( _ ) {
if (!arguments.length) return yTicks;
yTicks = _;
return chart;
};
return chart;
}; // end FUNCTION groupedBar()
Chart.stackedBar = function() {
var margin = {'top': 20, 'right': 20, 'bottom': 100, 'left': 80},
height = 400,
width = 760,
xLabel = 'x',
yLabel = 'y',
legend = [''],
xValue = function(d) { return d.x; },
yValue = function(d) { return d.y; },
label = function(d) { return d.label; },
xScale = d3.scale.linear(),
yScale = d3.scale.linear(),
yTicks,
xTickLabels,
xAxis = d3.svg.axis().scale( xScale ).orient( 'bottom' ),
yAxis = d3.svg.axis().scale( yScale ).orient( 'left' ),
xDomain, yDomain,
canvas, graph, dataset, rect;
// Stack layout generator:
var stack = d3.layout.stack();
function chart( selection ) {
selection.each( function( data ) {
// Standardize the data:
data = formatData( data );
// Update the chart parameters:
updateParams( data );
// Create the chart base:
createBase( this );
// Create the Columns:
createColumns( data );
// Create the axes:
createAxes();
});
}; // end FUNCTION chart()
function formatData( data ) {
// Convert data to standard representation; needed for non-deterministic accessors:
data = d3.range(data.length).map( function(id) {
return data[id].map( function(d, i) {
return {
'x': xValue.call(data[id], d, i),
'y': yValue.call(data[id], d, i),
'label': label.call(data[id], d, i)
};
});
});
// Stackify the data:
data = stack( data );
return data;
}; // end FUNCTION formatData()
function updateParams( data ) {
if (!xDomain) {
var xMin = d3.min(data, function(dataset) {
return d3.min( dataset, function(d) {
return d.x;
});
});
var xMax = d3.max(data, function(dataset) {
return d3.max( dataset, function(d) {
return d.x;
});
});
xDomain = [xMin, xMax];
};
if (!yDomain) {
var yMin = 0,
yMax = d3.max(data, function(dataset) {
return d3.max( dataset, function(d) {
return d.y + d.y0;
});
});
yDomain = [yMin, yMax];
};
if (yTicks) {
yAxis.ticks( yTicks );
};
// Update the x-scale:
xScale
.domain( xDomain )
.rangeRoundBands( [0, width - margin.left - margin.right] );
// Update the y-scale:
yScale
.domain( yDomain )
.range( [height - margin.top - margin.bottom, 0]);
}; // end FUNCTION updateParams()
function createBase( selection ) {
// Create the SVG element:
canvas = d3.select( selection ).append('svg:svg')
.attr('width', width)
.attr('height', height)
.attr('class', 'canvas');
// Create the graph element:
graph = canvas.append('svg:g')
.attr('class', 'graph')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
}; // end FUNCTION createBase()
function createColumns( data ) {
// Add a group for each dataset:
dataset = graph.selectAll('.dataset')
.data( data )
.enter().append('svg:g')
.attr('class', 'dataset');
// Add a rectangle for each date:
rect = dataset.selectAll('.rect')
.data( function(d) { return d;} )
.enter().append('svg:rect')
.attr('class', function(d,i) { return 'rect ' + d.label; })
.attr('x', function(d) { return X(d); })
.attr('y', function(d) { return Y(d); })
.attr('height', function(d) { return yScale(d.y0) - Y(d); })
.attr('width', xScale.rangeBand() );
// Add tooltips:
rect.append('svg:title')
.text( function(d) { return Math.round(d.y); } );
}; // end FUNCTION createColumns()
function createAxes() {
xTickLabels = graph.append('svg:g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + (height - margin.bottom) + ')')
.selectAll('.label')
.data( xScale.domain() )
.enter().append('svg:text')
.attr('class', 'label')
.attr('x', function(d) { return xScale(d) + xScale.rangeBand()/2; })
.attr('y', -5)
.attr('text-anchor', 'middle')
.attr('dy', '.71em')
.text( d3.time.format("%b") );
graph.select('.x.axis')
.append('svg:text')
.attr('y', 40)
.attr('x', (width - margin.left - margin.right)/ 2)
.attr('text-anchor', 'middle')
.attr('class', 'label')
.text( xLabel );
graph.append('svg:g')
.attr('class', 'y axis')
.call( yAxis )
.append('svg:text')
.attr('transform', 'rotate(-90)')
.attr('y', -64)
.attr('x', -yScale.range()[0] / 2)
.attr('text-anchor', 'middle')
.attr('class', 'label')
.text( yLabel );
}; // end FUNCTION createAxes()
function X(d) {
return xScale( d.x );
};
function Y(d) {
return yScale( d.y + d.y0 );
};
// Set/Get: margin
chart.margin = function( _ ) {
if (!arguments.length) return margin;
margin = _;
return chart;
};
// Set/Get: width
chart.width = function( _ ) {
if (!arguments.length) return width;
width = _;
return chart;
};
// Set/Get: height
chart.height = function( _ ) {
if (!arguments.length) return height;
height = _;
return chart;
};
// Set/Get: x
chart.x = function( _ ) {
if (!arguments.length) return xValue;
xValue = _;
return chart;
};
// Set/Get: y
chart.y = function( _ ) {
if (!arguments.length) return yValue;
yValue = _;
return chart;
};
// Set/Get: label
chart.label = function( _ ) {
if (!arguments.length) return label;
label = _;
return chart;
};
// Set/Get: legend
chart.legend = function( _ ) {
if (!arguments.length) return legend;
legend = _;
return chart;
};
// Set/Get: xLabel
chart.xLabel = function( _ ) {
if (!arguments.length) return xLabel;
xLabel = _;
return chart;
};
// Set/Get: yLabel
chart.yLabel = function( _ ) {
if (!arguments.length) return yLabel;
yLabel = _;
return chart;
};
// Set/Get: xScale
chart.xScale = function( _ ) {
if (!arguments.length) return xScale;
xScale = _;
xAxis.scale( xScale );
return chart;
};
// Set/Get: xDomain
chart.xDomain = function( _ ) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
// Set/Get: yDomain
chart.yDomain = function( _ ) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
// Set/Get: yTicks
chart.yTicks = function( _ ) {
if (!arguments.length) return yTicks;
yTicks = _;
return chart;
};
return chart;
}; // end FUNCTION stackedBar()
Chart.multiplePie = function() {
var margin = {'top': 20, 'right': 20, 'bottom': 100, 'left': 80},
height = 400,
width = 760,
legend = [''],
xLabel = 'x',
radius = function(d) { return d.r; },
rScale = d3.scale.linear(),
rDomain,
values = function(d) { return d.values; },
labels = function(d) { return d.labels; },
xValue = function(d) { return d.x; },
canvas, graph, pie = {}, paths;
// Pie layout generator:
pie.layout = d3.layout.pie().sort( null );
pie.numPerRow = 6;
pie.margin = 2;
// Arc generator:
pie.arc = d3.svg.arc().innerRadius( 0 ).outerRadius( R );
function chart( selection ) {
selection.each( function( data ) {
// Standardize the data:
data = formatData( data );
// Update the chart parameters:
updateParams( data );
// Create the chart base:
createBase( this );
// Create the Columns:
createPies( data );
});
}; // end FUNCTION chart()
function formatData( data ) {
// Convert data to standard representation; needed for non-deterministic accessors:
data = data.map( function(d, i) {
return {
'r': radius.call(data, d, i),
'x': xValue.call(data, d, i),
'values': values.call(data, d, i),
'labels': labels.call(data, d, i)
};
});
return data;
}; // end FUNCTION formatData()
function updateParams( data ) {
var numPies = data.length;
// Calculate the maximum width for a pie chart:
pie.maxWidth = Math.floor( (width-margin.left-margin.right) / pie.numPerRow ) - pie.margin*2;
if (!rDomain) {
rDomain = [0, d3.max( data, function(d) { return d.r; }) ];
};
// Update radius scale:
rScale.domain( rDomain )
.range( [0, pie.maxWidth/2] );
}; // end FUNCTION updateParams()
function createBase( selection ) {
// Create the SVG element:
canvas = d3.select( selection ).append('svg:svg')
.attr('width', width)
.attr('height', height)
.attr('class', 'canvas');
// Create the graph element:
graph = canvas.append('svg:g')
.attr('class', 'graph')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
}; // end FUNCTION createBase()
function createPies( data ) {
// Add a group for each data unit:
pie.groups = graph.selectAll('.pie')
.data( data )
.enter().append('svg:g')
.attr('class', 'pie')
.attr('transform', function(d,i) {
// Tricky bit to ensure we have the correct alignment per row and column:
return 'translate(' +
( (i % pie.numPerRow)*pie.maxWidth + pie.maxWidth/2 + (2*(i%pie.numPerRow)+1)*pie.margin )
+ ',' +
( Math.floor(i/pie.numPerRow) * pie.maxWidth + pie.maxWidth/2 + (2*Math.floor(i/pie.numPerRow)+1)*pie.margin + ( (i/pie.numPerRow >= 1) ? 40 : 0 ) ) + ')';
});
// Generate the paths:
pie.paths = pie.groups.selectAll('.piePath')
.data( function(d) {
d = pie.layout( d.values ).map( function(wedge, i) {
wedge.r = d.r;
wedge.label = d.labels[i];
return wedge;
});
return d;
})
.enter().append('svg:path')
.attr('d', pie.arc)
.attr('class', function(d,i) { return 'piePath ' + d.label; } );
// Add tooltips:
pie.paths.append('svg:title')
.text( function(d,i) { return d.label + ': ' + Math.round(d.value); } );
// Add pie labels:
pie.groups.append('svg:text')
.attr('transform', 'translate(0, ' + (pie.maxWidth/2) + ')' )
.attr('text-anchor', 'middle')
.attr('y', 14)
.text( function(d) { return d.x; });
// Append an x label:
graph.append('svg:text')
.attr('class', 'label')
.attr('transform', 'translate(' + ( (width-margin.left-margin.right)/2 ) + ',' + 0 + ')' ) //( Math.floor( data.length / pie.numPerRow) * width / pie.numPerRow + 20)
.attr('text-anchor', 'middle')
.text( xLabel );
}; // end FUNCTION createPies()
function R(d) {
return rScale( d.r );
};
// Set/Get: margin
chart.margin = function( _ ) {
if (!arguments.length) return margin;
margin = _;
return chart;
};
// Set/Get: width
chart.width = function( _ ) {
if (!arguments.length) return width;
width = _;
return chart;
};
// Set/Get: height
chart.height = function( _ ) {
if (!arguments.length) return height;
height = _;
return chart;
};
// Set/Get: radius
chart.radius = function( _ ) {
if (!arguments.length) return radius;
radius = _;
return chart;
};
// Set/Get: rDomain
chart.rDomain = function( _ ) {
if (!arguments.length) return rDomain;
rDomain = _;
return chart;
};
// Set/Get: x
chart.x = function( _ ) {
if (!arguments.length) return xValue;
xValue = _;
return chart;
};
// Set/Get: values
chart.values = function( _ ) {
if (!arguments.length) return values;
values = _;
return chart;
};
// Set/Get: labels
chart.labels = function( _ ) {
if (!arguments.length) return labels;
labels = _;
return chart;
};
// Set/Get: xLabel
chart.xLabel = function( _ ) {
if (!arguments.length) return xLabel;
xLabel = _;
return chart;
};
// Set/Get: legend
chart.legend = function( _ ) {
if (!arguments.length) return legend;
legend = _;
return chart;
};
return chart;
}; // end FUNCTION multiplePie()
Chart.multipleDonut = function() {
var margin = {'top': 20, 'right': 20, 'bottom': 100, 'left': 80},
height = 400,
width = 760,
legend = [''],
xLabel = 'x',
radius = function(d) { return d.r; },
rScale = d3.scale.linear(),
rDomain,
minRadius = 15,
values = function(d) { return d.values; },
labels = function(d) { return d.labels; },
xValue = function(d) { return d.x; },
canvas, graph, pie = {}, paths;
// Pie layout generator:
pie.layout = d3.layout.pie().sort( null );
pie.numPerRow = 6;
pie.margin = 2;
// Arc generator:
pie.arc = d3.svg.arc().innerRadius( minRadius ).outerRadius( R );
function chart( selection ) {
selection.each( function( data ) {
// Standardize the data:
data = formatData( data );
// Update the chart parameters:
updateParams( data );
// Create the chart base:
createBase( this );
// Create the Columns:
createPies( data );
});
}; // end FUNCTION chart()
function formatData( data ) {
// Convert data to standard representation; needed for non-deterministic accessors:
data = data.map( function(d, i) {
return {
'r': radius.call(data, d, i),
'x': xValue.call(data, d, i),
'values': values.call(data, d, i),
'labels': labels.call(data, d, i)
};
});
return data;
}; // end FUNCTION formatData()
function updateParams( data ) {
var numPies = data.length;
// Calculate the maximum width for a pie chart:
pie.maxWidth = Math.floor( (width-margin.left-margin.right) / pie.numPerRow ) - pie.margin*2;
if (!rDomain) {
rDomain = [0, d3.max( data, function(d) { return d.r; }) ];
};
// Update radius scale:
rScale.domain( rDomain )
.range( [minRadius, pie.maxWidth/2] );
}; // end FUNCTION updateParams()
function createBase( selection ) {
// Create the SVG element:
canvas = d3.select( selection ).append('svg:svg')
.attr('width', width)
.attr('height', height)
.attr('class', 'canvas');
// Create the graph element:
graph = canvas.append('svg:g')
.attr('class', 'graph')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
}; // end FUNCTION createBase()
function createPies( data ) {
// Add a group for each data unit:
pie.groups = graph.selectAll('.pie')
.data( data )
.enter().append('svg:g')
.attr('class', 'pie')
.attr('transform', function(d,i) {
// Tricky bit to ensure we have the correct alignment per row and column:
return 'translate(' +
( (i % pie.numPerRow)*pie.maxWidth + pie.maxWidth/2 + (2*(i%pie.numPerRow)+1)*pie.margin )
+ ',' +
( Math.floor(i/pie.numPerRow) * pie.maxWidth + pie.maxWidth/2 + (2*Math.floor(i/pie.numPerRow)+1)*pie.margin + ( (i/pie.numPerRow >= 1) ? 40 : 0 ) ) + ')';
});
// Generate the paths:
pie.paths = pie.groups.selectAll('.piePath')
.data( function(d) {
d = pie.layout( d.values ).map( function(wedge, i) {
wedge.r = d.r;
wedge.label = d.labels[i];
return wedge;
});
return d;
})
.enter().append('svg:path')
.attr('d', pie.arc)
.attr('class', function(d,i) { return 'piePath ' + d.label; } );
// Add tooltips:
pie.paths.append('svg:title')
.text( function(d,i) { return d.label + ': ' + Math.round(d.value); } );
// Add x labels:
pie.groups.append('svg:text')
.attr('transform', 'translate(0, ' + (pie.maxWidth/2) + ')' )
.attr('text-anchor', 'middle')
.attr('y', 14)
.text( function(d) { return d.x; });
// Append an x label:
graph.append('svg:text')
.attr('class', 'label')
.attr('transform', 'translate(' + ( (width-margin.left-margin.right)/2 ) + ',' + 0 + ')' ) // Math.floor( data.length / pie.numPerRow) * width / pie.numPerRow + 20
.attr('text-anchor', 'middle')
.text( xLabel );
}; // end FUNCTION createPies()
function R(d) {
return rScale( d.r );
};
// Set/Get: margin
chart.margin = function( _ ) {
if (!arguments.length) return margin;
margin = _;
return chart;
};
// Set/Get: width
chart.width = function( _ ) {
if (!arguments.length) return width;
width = _;
return chart;
};
// Set/Get: height
chart.height = function( _ ) {
if (!arguments.length) return height;
height = _;
return chart;
};
// Set/Get: radius
chart.radius = function( _ ) {
if (!arguments.length) return radius;
radius = _;
return chart;
};
// Set/Get: rDomain
chart.rDomain = function( _ ) {
if (!arguments.length) return rDomain;
rDomain = _;
return chart;
};
// Set/Get: x
chart.x = function( _ ) {
if (!arguments.length) return xValue;
xValue = _;
return chart;
};
// Set/Get: values
chart.values = function( _ ) {
if (!arguments.length) return values;
values = _;
return chart;
};
// Set/Get: labels
chart.labels = function( _ ) {
if (!arguments.length) return labels;
labels = _;
return chart;
};
// Set/Get: xLabel
chart.xLabel = function( _ ) {
if (!arguments.length) return xLabel;
xLabel = _;
return chart;
};
// Set/Get: legend
chart.legend = function( _ ) {
if (!arguments.length) return legend;
legend = _;
return chart;
};
return chart;
}; // end FUNCTION multipleDonut()
/* Apply a natural box layout model to all elements */
* {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
body {
font-family: 'Cabin', sans-serif;
font-size: 14px;
font-weight: normal;
color: #474747;
width: 100%;
min-height: 100%;
margin-bottom: 200px;
position: relative;
}
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
figure {
position: relative;
float: left;
margin-top: 0;
margin-bottom: 40px;
}
.half {
width: 50%;
min-width: 400px;
}
.quarter {
width: 25%;
min-width: 200px;
}
h1 {
width: 70%;
margin: 0 auto;
margin-top: 20px;
margin-bottom: 20px;
text-align: center;
font-size: 24px;
}
.title, .legend {
font-family: baskerville, serif;
}
.title, .legend {
text-transform: uppercase;
}
.title {
font-size: 18px;
width: 400px;
text-align: center;
display: block;
margin: 0 auto;
margin-top: 50px;
}
.title .small {
font-size: 12px;
}
.canvas {
font-family: 'Cabin', sans-serif;
font-size: 14px;
fill: #474747;
font-weight: normal;
}
.rect {
stroke: rgb(240,240,240);
stroke-width: 1px;
shape-rendering: crispEdges;
}
.label {
font-size: 14px;
}
.axis path {
fill: none;
}
.y.axis path {
stroke: none;
}
.x.axis path {
stroke: #aaa;
stroke-width: 1px;
}
.axis line {
stroke: #aaa;
stroke-width: 1px;
}
.disease {
fill: rgb(198, 226, 255);
}
.other {
fill: rgb(50,50,50);
}
.wounds {
fill: rgb(252,112,147);
}
.disease.line{
stroke: rgb(198, 226, 255);
stroke-width: 4px;
fill: none;
}
.other.line {
stroke: rgb(50,50,50);
stroke-width: 4px;
fill: none;
}
.wounds.line {
stroke: rgb(252,112,147);
stroke-width: 4px;
fill: none;
}
.area {
stroke: none;
}
.legend {
width: 400px;
height: 50px;
padding: 0 20px;
display: block;
position: relative;
margin: 0 auto;
top: -150px;
text-align: center;
}
.slider {
width: 400px;
display: block;
position: relative;
margin: 0 auto;
left: -30px; /* hacky */
top: -100px;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment