d3
Version:
A small, free JavaScript library for manipulating documents based on data.
1 lines • 14.3 kB
JavaScript
(function(){function N(a,b,c){return a._tree.ancestor.parent==b.parent?a._tree.ancestor:c}function M(a,b,c){a=a._tree,b=b._tree;var d=c/(b.number-a.number);a.change+=d,b.change-=d,b.shift+=c,b.prelim+=c,b.mod+=c}function L(a){var b=0,c=0,d=a.children,e=d.length,f;while(--e>=0)f=d[e]._tree,f.prelim+=b,f.mod+=b,b+=f.shift+(c+=f.change)}function K(a,b){function c(a,d){var e=a.children;if(e){var f,g=null,h=-1,i=e.length;while(++h<i)f=e[h],c(f,g),g=f}b(a,d)}c(a,null)}function J(a,b){return a.depth-b.depth}function I(a,b){return b.x-a.x}function H(a,b){return a.x-b.x}function G(a,b){var c=a.children;if(c){var d,e=c.length,f=-1;while(++f<e)b(d=G(c[f],b),a)>0&&(a=d)}return a}function F(a){return a.children?a.children[a.children.length-1]:a._tree.thread}function E(a){return a.children?a.children[0]:a._tree.thread}function D(a,b){return a.parent==b.parent?1:2}function C(a){return d3.merge(a.map(function(a){return(a.children||[]).map(function(b){return{source:a,target:b}})}))}function B(a){var b=a.children;return b?B(b[b.length-1]):a}function A(a){var b=a.children;return b?A(b[0]):a}function z(a){return a.reduce(function(a,b){return a+b.x},0)/a.length}function y(a){return 1+d3.max(a,function(a){return a.y})}function x(a,b,c){var d=b.r+c.r,e=a.r+c.r,f=b.x-a.x,g=b.y-a.y,h=Math.sqrt(f*f+g*g),i=(e*e+h*h-d*d)/(2*e*h),j=Math.acos(i),k=i*e,l=Math.sin(j)*e;f/=h,g/=h,c.x=a.x+k*f+l*g,c.y=a.y+k*g-l*f}function w(a,b,c,d){var e=a.children;a.x=b+=d*a.x,a.y=c+=d*a.y,a.r*=d;if(e){var f=-1,g=e.length;while(++f<g)w(e[f],b,c,d)}}function v(a){var b=a.children;b?(b.forEach(v),a.r=s(b)):a.r=Math.sqrt(a.value)}function u(a){delete a._pack_next,delete a._pack_prev}function t(a){a._pack_next=a._pack_prev=a}function s(a){function l(a){b=Math.min(a.x-a.r,b),c=Math.max(a.x+a.r,c),d=Math.min(a.y-a.r,d),e=Math.max(a.y+a.r,e)}var b=Infinity,c=-Infinity,d=Infinity,e=-Infinity,f=a.length,g,h,i,j,k;a.forEach(t),g=a[0],g.x=-g.r,g.y=0,l(g);if(f>1){h=a[1],h.x=h.r,h.y=0,l(h);if(f>2){i=a[2],x(g,h,i),l(i),p(g,i),g._pack_prev=i,p(i,h),h=g._pack_next;for(var m=3;m<f;m++){x(g,h,i=a[m]);var n=0,o=1,s=1;for(j=h._pack_next;j!=h;j=j._pack_next,o++)if(r(j,i)){n=1;break}if(n==1)for(k=g._pack_prev;k!=j._pack_prev;k=k._pack_prev,s++)if(r(k,i)){s<o&&(n=-1,j=k);break}n==0?(p(g,i),h=i,l(i)):n>0?(q(g,j),h=j,m--):(q(j,h),g=j,m--)}}}var v=(b+c)/2,w=(d+e)/2,y=0;for(var m=0;m<f;m++){var z=a[m];z.x-=v,z.y-=w,y=Math.max(y,z.r+Math.sqrt(z.x*z.x+z.y*z.y))}a.forEach(u);return y}function r(a,b){var c=b.x-a.x,d=b.y-a.y,e=a.r+b.r;return e*e-c*c-d*d>.001}function q(a,b){a._pack_next=b,b._pack_prev=a}function p(a,b){var c=a._pack_next;a._pack_next=b,b._pack_prev=a,b._pack_next=c,c._pack_prev=b}function o(a,b){return a.value-b.value}function n(a,b){return b.value-a.value}function m(a){return a.value}function l(a){return a.children}function k(a,b){return a+b.y}function j(a){var b=1,c=0,d=a[0].y,e,f=a.length;for(;b<f;++b)(e=a[b].y)>d&&(c=b,d=e);return c}function i(a){return a.reduce(k,0)}function f(c){(a=c).fixed=!0,b=this,d3.event.stopPropagation(),d3.event.preventDefault()}function e(b){b!==a&&(b.fixed=!1)}function c(a){a.fixed=!0}d3.layout={},d3.layout.chord=function(){function k(){b.sort(function(a,b){a=Math.min(a.source.value,a.target.value),b=Math.min(b.source.value,b.target.value);return i(a,b)})}function j(){var a={},j=[],l=d3.range(e),m=[],n,o,p,q,r;b=[],c=[],n=0,q=-1;while(++q<e){o=0,r=-1;while(++r<e)o+=d[q][r];j.push(o),m.push(d3.range(e)),n+=o}g&&l.sort(function(a,b){return g(j[a],j[b])}),h&&m.forEach(function(a,b){a.sort(function(a,c){return h(d[b][a],d[b][c])})}),n=(2*Math.PI-f*e)/n,o=0,q=-1;while(++q<e){p=o,r=-1;while(++r<e){var s=l[q],t=m[q][r],u=d[s][t];a[s+"-"+t]={index:s,subindex:t,startAngle:o,endAngle:o+=u*n,value:u}}c.push({index:s,startAngle:p,endAngle:o,value:(o-p)/n}),o+=f}q=-1;while(++q<e){r=q-1;while(++r<e){var v=a[q+"-"+r],w=a[r+"-"+q];(v.value||w.value)&&b.push({source:v,target:w})}}i&&k()}var a={},b,c,d,e,f=0,g,h,i;a.matrix=function(f){if(!arguments.length)return d;e=(d=f)&&d.length,b=c=null;return a},a.padding=function(d){if(!arguments.length)return f;f=d,b=c=null;return a},a.sortGroups=function(d){if(!arguments.length)return g;g=d,b=c=null;return a},a.sortSubgroups=function(c){if(!arguments.length)return h;h=c,b=null;return a},a.sortChords=function(c){if(!arguments.length)return i;i=c,b&&k();return a},a.chords=function(){b||j();return b},a.groups=function(){c||j();return c};return a},d3.layout.force=function(){function w(){!a||(v(),a.fixed=!1,a=b=null)}function v(){if(!!a){var c=d3.svg.mouse(b);a.px=c[0],a.py=c[1],d.resume()}}function u(){var a=p.length,b=q.length,c=d3.geom.quadtree(p),d,e,f,n,o,r,u;d=-1;while(++d<a)(e=p[d]).fx=e.fy=0;for(d=0;d<b;++d){e=q[d],f=e.source,n=e.target,r=n.x-f.x,u=n.y-f.y;if(o=Math.sqrt(r*r+u*u))o=i*(o-k)/o,r*=o,u*=o,n.x-=r,n.y-=u,f.x+=r,f.y+=u}s(c);var v=i*m;r=h[0]/2,u=h[1]/2,d=-1;while(++d<a)e=p[d],f=r-e.x,n=u-e.y,o=v*Math.sqrt(f*f+n*n),f*=o,n*=o,e.fx+=f,e.fy+=n;var w=i*l;d=-1;while(++d<a)c.visit(t(p[d],w));d=-1;while(++d<a)e=p[d],e.fixed?(e.x=e.px,e.y=e.py):(r=e.px-(e.px=e.x),u=e.py-(e.py=e.y),e.x+=e.fx-r*j,e.y+=e.fy-u*j);g.tick.dispatch({type:"tick"});return(i*=.99)<.005}function t(a,b){return function(c,d,e,f,g){if(c.point!=a){var h=c.cx-a.x||Math.random(),i=c.cy-a.y||Math.random(),j=1/Math.sqrt(h*h+i*i);if((f-d)*j<n){var k=b*c.count*j*j;a.fx+=h*k,a.fy+=i*k;return!0}if(c.point){var k=b*j*j;a.fx+=h*k,a.fy+=i*k}}}}function s(a){var b=0,c=0;a.count=0,a.leaf||a.nodes.forEach(function(d){s(d),a.count+=d.count,b+=d.count*d.cx,c+=d.count*d.cy}),a.point&&(a.count++,b+=a.point.x,c+=a.point.y),a.cx=b/a.count,a.cy=c/a.count}var d={},g=d3.dispatch("tick"),h=[1,1],i,j=.9,k=30,l=-60,m=.001,n=.8,o,p,q,r;d.on=function(a,b){g[a].add(b);return d},d.nodes=function(a){if(!arguments.length)return p;p=a;return d},d.links=function(a){if(!arguments.length)return q;q=a;return d},d.size=function(a){if(!arguments.length)return h;h=a;return d},d.distance=function(a){if(!arguments.length)return k;k=a;return d},d.drag=function(a){if(!arguments.length)return j;j=a;return d},d.charge=function(a){if(!arguments.length)return l;l=a;return d},d.gravity=function(a){if(!arguments.length)return m;m=a;return d},d.theta=function(a){if(!arguments.length)return n;n=a;return d},d.start=function(){var a,b=p.length,c=q.length,e=h[0],f=h[1],g;for(a=0;a<b;++a)g=p[a],isNaN(g.x)&&(g.x=Math.random()*e),isNaN(g.y)&&(g.y=Math.random()*f),isNaN(g.px)&&(g.px=g.x),isNaN(g.py)&&(g.py=g.y);for(a=0;a<c;++a)g=q[a],typeof g.source=="number"&&(g.source=p[g.source]),typeof g.target=="number"&&(g.target=p[g.target]);return d.resume()},d.resume=function(){i=.1,d3.timer(u);return d},d.stop=function(){i=0;return d},d.drag=function(){this.on("mouseover",c).on("mouseout",e).on("mousedown",f),d3.select(window).on("mousemove",v).on("mouseup",w);return d};return d};var a,b;d3.layout.partition=function(){function e(e,f){var g=a.call(this,e,f);c(g[0],0,b[0],b[1]/d(g[0]));return g}function d(a){var b=a.children,c=0;if(b){var e=-1,f=b.length;while(++e<f)c=Math.max(c,d(b[e]))}return 1+c}function c(a,b,d,e){var f=a.children;a.x=b,a.y=a.depth*e,a.dx=d,a.dy=e;if(f){var g=-1,h=f.length,i,j;d/=a.value;while(++g<h)c(i=f[g],b,j=i.value*d,e),b+=j}}var a=d3.layout.hierarchy(),b=[1,1];e.sort=d3.rebind(e,a.sort),e.children=d3.rebind(e,a.children),e.value=d3.rebind(e,a.value),e.size=function(a){if(!arguments.length)return b;b=a;return e};return e},d3.layout.pie=function(){function f(f,g){var h=+(typeof c=="function"?c.apply(this,arguments):c),i=(typeof e=="function"?e.apply(this,arguments):e)-c,j=d3.range(f.length);b!=null&&j.sort(function(a,c){return b(f[a],f[c])});var k=f.map(a);i/=k.reduce(function(a,b){return a+b},0);var l=j.map(function(a){return{value:d=k[a],startAngle:h,endAngle:h+=d*i}});return f.map(function(a,b){return l[j[b]]})}var a=Number,b=null,c=0,e=2*Math.PI;f.value=function(b){if(!arguments.length)return a;a=b;return f},f.sort=function(a){if(!arguments.length)return b;b=a;return f},f.startAngle=function(a){if(!arguments.length)return c;c=a;return f},f.endAngle=function(a){if(!arguments.length)return e;e=a;return f};return f},d3.layout.stack=function(){function c(c){var d=c.length,e=c[0].length,f,i,j,k=g[a](c);h[b](c,k);for(i=0;i<e;++i)for(f=1,j=c[k[0]][i].y0;f<d;++f)c[k[f]][i].y0=j+=c[k[f-1]][i].y;return c}var a="default",b="zero";c.order=function(b){if(!arguments.length)return a;a=b;return c},c.offset=function(a){if(!arguments.length)return b;b=a;return c};return c};var g={"inside-out":function(a){var b=a.length,c,d,e=a.map(j),f=a.map(i),g=d3.range(b).sort(function(a,b){return e[a]-e[b]}),h=0,k=0,l=[],m=[];for(c=0;c<b;c++)d=g[c],h<k?(h+=f[d],l.push(d)):(k+=f[d],m.push(d));return m.reverse().concat(l)},reverse:function(a){return d3.range(a.length).reverse()},"default":function(a){return d3.range(a.length)}},h={silhouette:function(a,b){var c=a.length,d=a[0].length,e=[],f=0,g,h,i;for(h=0;h<d;++h){for(g=0,i=0;g<c;g++)i+=a[g][h].y;i>f&&(f=i),e.push(i)}for(h=0,g=b[0];h<d;++h)a[g][h].y0=(f-e[h])/2},wiggle:function(a,b){var c=a.length,d=a[0],e=d.length,f=0,g,h,i,j,k,l=b[0],m,n,o,p,q,r;a[l][0].y0=q=r=0;for(h=1;h<e;++h){for(g=0,m=0;g<c;++g)m+=a[g][h].y;for(g=0,n=0,p=d[h].x-d[h-1].x;g<c;++g){for(i=0,j=b[g],o=(a[j][h].y-a[j][h-1].y)/(2*p);i<g;++i)o+=(a[k=b[i]][h].y-a[k][h-1].y)/p;n+=o*a[j][h].y}a[l][h].y0=q-=m?n/m*p:0,q<r&&(r=q)}for(h=0;h<e;++h)a[l][h].y0-=r},zero:function(a,b){var c=0,d=a[0].length,e=b[0];for(;c<d;++c)a[e][c].y0=0}};d3.layout.hierarchy=function(){function g(a){var b=[];e(a,0,b);return b}function f(a,b){var d=a.children,e=0;if(d){var h=-1,i=d.length,j=b+1;while(++h<i)e+=f(d[h],j)}else c&&(e=c.call(g,a.data,b));c&&(a.value=e);return e}function e(f,h,i){var j=b.call(g,f,h),k={depth:h,data:f};i.push(k);if(j){var l=-1,m=j.length,n=k.children=[],o=0,p=h+1;while(++l<m)d=e(j[l],p,i),d.parent=k,n.push(d),o+=d.value;a&&n.sort(a),c&&(k.value=o)}else c&&(k.value=c.call(g,f,h));return k}var a=n,b=l,c=m;g.sort=function(b){if(!arguments.length)return a;a=b;return g},g.children=function(a){if(!arguments.length)return b;b=a;return g},g.value=function(a){if(!arguments.length)return c;c=a;return g},g.revalue=function(a){f(a,0);return a};return g},d3.layout.pack=function(){function c(c,d){var e=a.call(this,c,d),f=e[0];f.x=0,f.y=0,v(f);var g=b[0],h=b[1],i=1/Math.max(2*f.r/g,2*f.r/h);w(f,g/2,h/2,i);return e}var a=d3.layout.hierarchy(),b=[1,1];c.sort=d3.rebind(c,a.sort),c.children=d3.rebind(c,a.children),c.value=d3.rebind(c,a.value),c.size=function(a){if(!arguments.length)return b;b=a;return c};return c.sort(o)},d3.layout.cluster=function(){function d(d,e){var f=a.call(this,d,e),g=f[0],h,i=0,j,k;K(g,function(a){a.children?(a.x=z(a.children),a.y=y(a.children)):(a.x=h?i+=b(a,h):0,a.y=0,h=a)});var l=A(g),m=B(g),n=l.x-b(l,m)/2,o=m.x+b(m,l)/2;K(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=(1-a.y/g.y)*c[1]});return f}var a=d3.layout.hierarchy().sort(null).value(null),b=D,c=[1,1];d.sort=d3.rebind(d,a.sort),d.children=d3.rebind(d,a.children),d.links=C,d.separation=function(a){if(!arguments.length)return b;b=a;return d},d.size=function(a){if(!arguments.length)return c;c=a;return d};return d},d3.layout.tree=function(){function d(d,e){function j(a,c,d){if(c){var e=a,f=a,g=c,h=a.parent.children[0],i=e._tree.mod,j=f._tree.mod,k=g._tree.mod,l=h._tree.mod,m;while(g=F(g),e=E(e),g&&e)h=E(h),f=F(f),f._tree.ancestor=a,m=g._tree.prelim+k-e._tree.prelim-i+b(g,e),m>0&&(M(N(g,a,d),a,m),i+=m,j+=m),k+=g._tree.mod,i+=e._tree.mod,l+=h._tree.mod,j+=f._tree.mod;g&&!F(f)&&(f._tree.thread=g,f._tree.mod+=k-j),e&&!E(h)&&(h._tree.thread=e,h._tree.mod+=i-l,d=a)}return d}function i(a,b){a.x=a._tree.prelim+b;var c=a.children;if(c){var d=-1,e=c.length;b+=a._tree.mod;while(++d<e)i(c[d],b)}}function h(a,c){var d=a.children,e=a._tree;if(d){var f=d.length,g=d[0],i,k=g,l,m=-1;while(++m<f)l=d[m],h(l,i),k=j(l,i,k),i=l;L(a);var n=.5*(g._tree.prelim+l._tree.prelim);c?(e.prelim=c._tree.prelim+b(a,c),e.mod=e.prelim-n):e.prelim=n}else c&&(e.prelim=c._tree.prelim+b(a,c))}var f=a.call(this,d,e),g=f[0];K(g,function(a,b){a._tree={ancestor:a,prelim:0,mod:0,change:0,shift:0,number:b?b._tree.number+1:0}}),h(g),i(g,-g._tree.prelim);var k=G(g,I),l=G(g,H),m=G(g,J),n=k.x-b(k,l)/2,o=l.x+b(l,k)/2,p=m.depth;K(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=a.depth/p*c[1],delete a._tree});return f}var a=d3.layout.hierarchy().sort(null).value(null),b=D,c=[1,1];d.sort=d3.rebind(d,a.sort),d.children=d3.rebind(d,a.children),d.links=C,d.separation=function(a){if(!arguments.length)return b;b=a;return d},d.size=function(a){if(!arguments.length)return c;c=a;return d};return d},d3.layout.treemap=function(){function k(b){var i=e||a(b),j=i[0];j.x=0,j.y=0,j.dx=c[0],j.dy=c[1],e&&a.revalue(j),f(j,c[0]*c[1]/j.value),(e?h:g)(j),d&&(e=i);return i}function j(a,c,d,e){var f=-1,g=a.length,h=d.x,i=d.y,j=c?b(a.area/c):0,k;if(c==d.dx){if(e||j>d.dy)j=d.dy;while(++f<g)k=a[f],k.x=h,k.y=i,k.dy=j,h+=k.dx=b(k.area/j);k.z=!0,k.dx+=d.x+d.dx-h,d.y+=j,d.dy-=j}else{if(e||j>d.dx)j=d.dx;while(++f<g)k=a[f],k.x=h,k.y=i,k.dx=j,i+=k.dy=b(k.area/j);k.z=!1,k.dy+=d.y+d.dy-i,d.x+=j,d.dx-=j}}function i(a,b){var c=a.area,d,e=0,f=Infinity,g=-1,h=a.length;while(++g<h)d=a[g].area,d<f&&(f=d),d>e&&(e=d);c*=c,b*=b;return Math.max(b*e/c,c/(b*f))}function h(a){if(!!a.children){var b={x:a.x,y:a.y,dx:a.dx,dy:a.dy},c=a.children.slice(),d,e=[];e.area=0;while(d=c.pop())e.push(d),e.area+=d.area,d.z!=null&&(j(e,d.z?b.dx:b.dy,b,!c.length),e.length=e.area=0);a.children.forEach(h)}}function g(a){if(!!a.children){var b={x:a.x,y:a.y,dx:a.dx,dy:a.dy},c=[],d=a.children.slice(),e,f=Infinity,h,k=Math.min(b.dx,b.dy),l;c.area=0;while((l=d.length)>0)c.push(e=d[l-1]),c.area+=e.area,(h=i(c,k))<=f?(d.pop(),f=h):(c.area-=c.pop().area,j(c,k,b,!1),k=Math.min(b.dx,b.dy),c.length=c.area=0,f=Infinity);c.length&&(j(c,k,b,!0),c.length=c.area=0),a.children.forEach(g)}}function f(a,b){var c=a.children;a.area=a.value*b;if(c){var d=-1,e=c.length;while(++d<e)f(c[d],b)}}var a=d3.layout.hierarchy(),b=Math.round,c=[1,1],d=!1,e;k.sort=d3.rebind(k,a.sort),k.children=d3.rebind(k,a.children),k.value=d3.rebind(k,a.value),k.size=function(a){if(!arguments.length)return c;c=a;return k},k.round=function(a){if(!arguments.length)return b!=Number;b=a?Math.round:Number;return k},k.sticky=function(a){if(!arguments.length)return d;d=a,e=null;return k};return k}})()