Includes, as the first behavior, a pan & zoom behavior. The canvas can be panned
by dragging the mouse, and zoomed using the mousewheel (or by double-click). By
listening to redraw events, users can decide whether to implement geometric
zooming (such as by setting the "transform" attribute on an `svg:g` element) or
semantic zooming (by changing the domain of a scale object and repositioning
elements).

This commit also includes two bug fixes. The `d3.format` class now properly
groups thousands of negative numbers, and supports the sign specifier. The
unicode minus symbol \u2212 is used for negative values. The `d3.scale.pow`
class now properly handles negative numbers, as well.
This commit is contained in:
Michael Bostock 2011-02-11 13:00:41 -08:00
Родитель b4231227e1
Коммит d215acef78
13 изменённых файлов: 495 добавлений и 92 удалений

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

@ -6,6 +6,8 @@ JS_COMPILER = \
all: \ all: \
d3.js \ d3.js \
d3.min.js \ d3.min.js \
d3.behavior.js \
d3.behavior.min.js \
d3.layout.js \ d3.layout.js \
d3.layout.min.js \ d3.layout.min.js \
d3.csv.js \ d3.csv.js \
@ -81,6 +83,12 @@ d3.svg.js: \
src/svg/chord.js \ src/svg/chord.js \
src/svg/mouse.js src/svg/mouse.js
d3.behavior.js: \
src/start.js \
src/behavior/behavior.js \
src/behavior/zoom.js \
src/end.js
d3.layout.js: \ d3.layout.js: \
src/start.js \ src/start.js \
src/layout/layout.js \ src/layout/layout.js \

132
d3.behavior.js Normal file
Просмотреть файл

@ -0,0 +1,132 @@
(function(){d3.behavior = {};
// TODO unbind zoom behavior?
// TODO unbind listener?
d3.behavior.zoom = function() {
// https://bugs.webkit.org/show_bug.cgi?id=40441
var bug40441 = /WebKit\/533/.test(navigator.userAgent) ? -1 : 0,
bug40441Last = 0,
x = 0,
y = 0,
z = 0,
listeners = [],
pan,
zoom;
function zoom() {
var container = this
.on("mousedown", mousedown)
.on("mousewheel", mousewheel)
.on("DOMMouseScroll", mousewheel)
.on("dblclick", mousewheel);
d3.select(window)
.on("mousemove", mousemove)
.on("mouseup", mouseup);
}
function mousedown(d, i) {
pan = {
x0: x - d3.event.clientX,
y0: y - d3.event.clientY,
target: this,
data: d,
index: i
};
d3.event.preventDefault();
window.focus(); // TODO focusableParent
}
function mousemove() {
zoom = null;
if (pan) {
x = d3.event.clientX + pan.x0;
y = d3.event.clientY + pan.y0;
dispatch.call(pan.target, pan.data, pan.index);
}
}
function mouseup() {
if (pan) {
mousemove();
pan = null;
}
}
function mousewheel(d, i) {
var e = d3.event;
// initialize the mouse location for zooming (to avoid drift)
if (!zoom) {
var p = d3.svg.mouse(this.nearestViewportElement || this);
zoom = {
x0: x,
y0: y,
z0: z,
x1: x - p[0],
y1: y - p[1]
};
}
// adjust zoom level
if (e.type == "dblclick") {
z = e.shiftKey ? Math.ceil(z - 1) : Math.floor(z + 1);
} else {
var delta = (e.wheelDelta / 120 || -e.detail) * .1;
/* Detect fast & large wheel events on WebKit. */
if (bug40441 < 0) {
var now = Date.now(), since = now - bug40441Last;
if ((since > 9) && (Math.abs(e.wheelDelta) / since >= 50)) bug40441 = 1;
bug40441Last = now;
}
if (bug40441 == 1) delta *= .03;
z += delta;
}
// adjust x and y to center around mouse location
var k = Math.pow(2, z - zoom.z0) - 1;
x = zoom.x0 + zoom.x1 * k;
y = zoom.y0 + zoom.y1 * k;
// dispatch redraw
dispatch.call(this, d, i);
}
function dispatch(d, i) {
var o = d3.event, // Events can be reentrant (e.g., focus).
k = Math.pow(2, z);
d3.event = {
scale: k,
translate: [x, y],
transform: function(sx, sy) {
if (sx) transform(sx, x);
if (sy) transform(sy, y);
}
};
function transform(scale, o) {
var domain = scale.__domain || (scale.__domain = scale.domain());
range = scale.range().map(function(v) { return (v - o) / k; });
scale.domain(domain).domain(range.map(scale.invert));
}
try {
for (var j = 0, m = listeners.length; j < m; j++) {
listeners[j].call(this, d, i);
}
} finally {
d3.event = o;
}
}
zoom.on = function(type, listener) {
if (type == "zoom") listeners.push(listener);
return zoom;
};
return zoom;
};
})()

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

@ -0,0 +1,3 @@
(function(){d3.behavior={};d3.behavior.zoom=function(){function a(){this.on("mousedown",t).on("mousewheel",n).on("DOMMouseScroll",n).on("dblclick",n);d3.select(window).on("mousemove",q).on("mouseup",u)}function t(e,f){c={x0:g-d3.event.clientX,y0:h-d3.event.clientY,target:this,data:e,index:f};d3.event.preventDefault();window.focus()}function q(){a=null;if(c){g=d3.event.clientX+c.x0;h=d3.event.clientY+c.y0;r.call(c.target,c.data,c.index)}}function u(){if(c){q();c=null}}function n(e,f){var b=d3.event;
if(!a){var i=d3.svg.mouse(this.nearestViewportElement||this);a={x0:g,y0:h,z0:j,x1:g-i[0],y1:h-i[1]}}if(b.type=="dblclick")j=b.shiftKey?Math.ceil(j-1):Math.floor(j+1);else{i=(b.wheelDelta/120||-b.detail)*0.1;if(o<0){var l=Date.now(),k=l-s;if(k>9&&Math.abs(b.wheelDelta)/k>=50)o=1;s=l}if(o==1)i*=0.03;j+=i}b=Math.pow(2,j-a.z0)-1;g=a.x0+a.x1*b;h=a.y0+a.y1*b;r.call(this,e,f)}function r(e,f){function b(d,m){var v=d.__domain||(d.__domain=d.domain());range=d.range().map(function(w){return(w-m)/l});d.domain(v).domain(range.map(d.invert))}
var i=d3.event,l=Math.pow(2,j);d3.event={scale:l,translate:[g,h],transform:function(d,m){d&&b(d,g);m&&b(m,h)}};try{for(var k=0,x=p.length;k<x;k++)p[k].call(this,e,f)}finally{d3.event=i}}var o=/WebKit\/533/.test(navigator.userAgent)?-1:0,s=0,g=0,h=0,j=0,p=[],c;a.on=function(e,f){e=="zoom"&&p.push(f);return a};return a}})();

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

@ -1,4 +1,4 @@
(function(){d3 = {version: "0.30.3"}; // semver (function(){d3 = {version: "0.30.4"}; // semver
if (!Date.now) Date.now = function() { if (!Date.now) Date.now = function() {
return +new Date(); return +new Date();
}; };
@ -298,10 +298,11 @@ function d3_dispatch(type) {
return dispatch; return dispatch;
}; };
// TODO align, sign, type // TODO align, type
d3.format = function(specifier) { d3.format = function(specifier) {
var match = d3_format_re.exec(specifier), var match = d3_format_re.exec(specifier),
fill = match[1] || " ", fill = match[1] || " ",
sign = d3_format_signs[match[3]] || d3_format_signs["-"],
zfill = match[5], zfill = match[5],
width = +match[6], width = +match[6],
comma = match[7], comma = match[7],
@ -311,9 +312,11 @@ d3.format = function(specifier) {
if (zfill) fill = "0"; // TODO align = "="; if (zfill) fill = "0"; // TODO align = "=";
if (type == "d") precision = "0"; if (type == "d") precision = "0";
return function(value) { return function(value) {
if ((type == "d") && (value % 1)) return ""; var number = +value,
if (precision) value = (+value).toFixed(precision); negative = (number < 0) && (number = -number);
else value += ""; if ((type == "d") && (number % 1)) return "";
if (precision) value = number.toFixed(precision);
else value = "" + number;
if (comma) { if (comma) {
var i = value.lastIndexOf("."), var i = value.lastIndexOf("."),
f = i >= 0 ? value.substring(i) : (i = value.length, ""), f = i >= 0 ? value.substring(i) : (i = value.length, ""),
@ -321,14 +324,20 @@ d3.format = function(specifier) {
while (i > 0) t.push(value.substring(i -= 3, i + 3)); while (i > 0) t.push(value.substring(i -= 3, i + 3));
value = t.reverse().join(",") + f; value = t.reverse().join(",") + f;
} }
var n = value.length; var length = (value = sign(negative, value)).length;
if (n < width) value = new Array(width - n + 1).join(fill) + value; if (length < width) value = new Array(width - length + 1).join(fill) + value;
return value; return value;
}; };
}; };
// [[fill]align][sign][#][0][width][,][.precision][type] // [[fill]align][sign][#][0][width][,][.precision][type]
var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/; var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
var d3_format_signs = {
"+": function(negative, value) { return (negative ? "\u2212" : "+") + value; },
" ": function(negative, value) { return (negative ? "\u2212" : " ") + value; },
"-": function(negative, value) { return negative ? "\u2212" + value : value; }
};
/* /*
* TERMS OF USE - EASING EQUATIONS * TERMS OF USE - EASING EQUATIONS
* *
@ -1903,11 +1912,11 @@ d3.scale.pow = function() {
b = 1 / p; b = 1 / p;
function powp(x) { function powp(x) {
return Math.pow(x, p); return x < 0 ? -Math.pow(-x, p) : Math.pow(x, p);
} }
function powb(x) { function powb(x) {
return Math.pow(x, b); return x < 0 ? -Math.pow(-x, b) : Math.pow(x, b);
} }
function scale(x) { function scale(x) {

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

@ -1,62 +1,63 @@
(function(){function Q(a){return Array.prototype.slice.call(a)}function x(a){return typeof a=="function"?a:function(){return a}}function D(a,b){return function(){var c=b.apply(a,arguments);return arguments.length?a:c}}function qa(a){return a==null}function ca(a){return a.replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g," ")}function da(a,b){b=Q(arguments);b[0]=this;a.apply(this,b);return this}function ra(){var a={},b=[];a.add=function(c){for(var g=0;g<b.length;g++)if(b[g].listener==c)return a;b.push({listener:c, (function(){function Q(a){return Array.prototype.slice.call(a)}function x(a){return typeof a=="function"?a:function(){return a}}function D(a,b){return function(){var c=b.apply(a,arguments);return arguments.length?a:c}}function ra(a){return a==null}function ca(a){return a.replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g," ")}function da(a,b){b=Q(arguments);b[0]=this;a.apply(this,b);return this}function sa(){var a={},b=[];a.add=function(c){for(var g=0;g<b.length;g++)if(b[g].listener==c)return a;b.push({listener:c,
on:true});return a};a.remove=function(c){for(var g=0;g<b.length;g++){var e=b[g];if(e.listener==c){e.on=false;b=b.slice(0,g).concat(b.slice(g+1));break}}return a};a.dispatch=function(){for(var c=b,g=0,e=c.length;g<e;g++){var d=c[g];d.on&&d.listener.apply(this,arguments)}};return a}function ea(a){return function(b){return 1-a(1-b)}}function fa(a){return function(b){return 0.5*(b<0.5?a(2*b):2-a(2-2*b))}}function sa(a){return a}function R(a){return function(b){return Math.pow(b,a)}}function ta(a){return 1- on:true});return a};a.remove=function(c){for(var g=0;g<b.length;g++){var e=b[g];if(e.listener==c){e.on=false;b=b.slice(0,g).concat(b.slice(g+1));break}}return a};a.dispatch=function(){for(var c=b,g=0,e=c.length;g<e;g++){var d=c[g];d.on&&d.listener.apply(this,arguments)}};return a}function ea(a){return function(b){return 1-a(1-b)}}function fa(a){return function(b){return 0.5*(b<0.5?a(2*b):2-a(2-2*b))}}function ta(a){return a}function R(a){return function(b){return Math.pow(b,a)}}function ua(a){return 1-
Math.cos(a*Math.PI/2)}function ua(a){return a?Math.pow(2,10*(a-1))-0.0010:0}function va(a){return 1-Math.sqrt(1-a*a)}function wa(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}function J(a,b,c){return{r:a,g:b,b:c,toString:xa}}function xa(){return"#"+S(this.r)+S(this.g)+S(this.b)}function S(a){return a<16?"0"+a.toString(16):a.toString(16)}function T(a,b,c){var g=0,e=0,d=0,h,f;if(h=/([a-z]+)\((.*)\)/i.exec(a)){f= Math.cos(a*Math.PI/2)}function va(a){return a?Math.pow(2,10*(a-1))-0.0010:0}function wa(a){return 1-Math.sqrt(1-a*a)}function xa(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375}function J(a,b,c){return{r:a,g:b,b:c,toString:ya}}function ya(){return"#"+S(this.r)+S(this.g)+S(this.b)}function S(a){return a<16?"0"+a.toString(16):a.toString(16)}function T(a,b,c){var g=0,e=0,d=0,i,f;if(i=/([a-z]+)\((.*)\)/i.exec(a)){f=
h[2].split(",");switch(h[1]){case "hsl":return c(parseFloat(f[0]),parseFloat(f[1])/100,parseFloat(f[2])/100);case "rgb":return b(U(f[0]),U(f[1]),U(f[2]))}}if(c=G[a])return b(c.r,c.g,c.b);if(a!=null&&a.charAt(0)=="#"){if(a.length==4){g=a.charAt(1);g+=g;e=a.charAt(2);e+=e;d=a.charAt(3);d+=d}else if(a.length==7){g=a.substring(1,3);e=a.substring(3,5);d=a.substring(5,7)}g=parseInt(g,16);e=parseInt(e,16);d=parseInt(d,16)}return b(g,e,d)}function ya(a,b,c){var g=Math.min(a/=255,b/=255,c/=255),e=Math.max(a, i[2].split(",");switch(i[1]){case "hsl":return c(parseFloat(f[0]),parseFloat(f[1])/100,parseFloat(f[2])/100);case "rgb":return b(U(f[0]),U(f[1]),U(f[2]))}}if(c=G[a])return b(c.r,c.g,c.b);if(a!=null&&a.charAt(0)=="#"){if(a.length==4){g=a.charAt(1);g+=g;e=a.charAt(2);e+=e;d=a.charAt(3);d+=d}else if(a.length==7){g=a.substring(1,3);e=a.substring(3,5);d=a.substring(5,7)}g=parseInt(g,16);e=parseInt(e,16);d=parseInt(d,16)}return b(g,e,d)}function za(a,b,c){var g=Math.min(a/=255,b/=255,c/=255),e=Math.max(a,
b,c),d=e-g,h=(e+g)/2;if(d){g=h<0.5?d/(e+g):d/(2-e-g);a=a==e?(b-c)/d+(b<c?6:0):b==e?(c-a)/d+2:(a-b)/d+4;a*=60}else g=a=0;return V(a,g,h)}function U(a){var b=parseFloat(a);return a.charAt(a.length-1)=="%"?Math.round(b*2.55):b}function V(a,b,c){return{h:a,s:b,l:c,toString:za}}function za(){return"hsl("+this.h+","+this.s*100+"%,"+this.l*100+"%)"}function ga(a,b,c){function g(h){if(h>360)h-=360;else if(h<0)h+=360;if(h<60)return e+(d-e)*h/60;if(h<180)return d;if(h<240)return e+(d-e)*(240-h)/60;return e} b,c),d=e-g,i=(e+g)/2;if(d){g=i<0.5?d/(e+g):d/(2-e-g);a=a==e?(b-c)/d+(b<c?6:0):b==e?(c-a)/d+2:(a-b)/d+4;a*=60}else g=a=0;return V(a,g,i)}function U(a){var b=parseFloat(a);return a.charAt(a.length-1)=="%"?Math.round(b*2.55):b}function V(a,b,c){return{h:a,s:b,l:c,toString:Aa}}function Aa(){return"hsl("+this.h+","+this.s*100+"%,"+this.l*100+"%)"}function ga(a,b,c){function g(i){if(i>360)i-=360;else if(i<0)i+=360;if(i<60)return e+(d-e)*i/60;if(i<180)return d;if(i<240)return e+(d-e)*(240-i)/60;return e}
var e,d;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;c=c<0?0:c>1?1:c;d=c<=0.5?c*(1+b):c+b-c*b;e=2*c-d;return J(Math.round(g(a+120)*255),Math.round(g(a)*255),Math.round(g(a-120)*255))}function y(a){function b(e){for(var d=[],h,f,i,k,j=0,o=a.length;j<o;j++){i=a[j];d.push(h=[]);h.parentNode=i.parentNode;h.parentData=i.parentData;for(var p=0,l=i.length;p<l;p++)if(k=i[p]){h.push(f=e(k));if(f&&"__data__"in k)f.__data__=k.__data__}else h.push(null)}return y(d)}function c(e){for(var d=[],h,f,i,k=0,j=a.length;k<j;k++){f= var e,d;a%=360;if(a<0)a+=360;b=b<0?0:b>1?1:b;c=c<0?0:c>1?1:c;d=c<=0.5?c*(1+b):c+b-c*b;e=2*c-d;return J(Math.round(g(a+120)*255),Math.round(g(a)*255),Math.round(g(a-120)*255))}function y(a){function b(e){for(var d=[],i,f,h,k,j=0,o=a.length;j<o;j++){h=a[j];d.push(i=[]);i.parentNode=h.parentNode;i.parentData=h.parentData;for(var p=0,l=h.length;p<l;p++)if(k=h[p]){i.push(f=e(k));if(f&&"__data__"in k)f.__data__=k.__data__}else i.push(null)}return y(d)}function c(e){for(var d=[],i,f,h,k=0,j=a.length;k<j;k++){f=
a[k];for(var o=0,p=f.length;o<p;o++)if(i=f[o]){d.push(h=e(i));h.parentNode=i;h.parentData=i.__data__}}return y(d)}function g(e){for(var d=0,h=a.length;d<h;d++)for(var f=a[d],i=0,k=f.length;i<k;i++){var j=f[i];if(j)return e.call(j,j.__data__,i)}return null}a.select=function(e){return b(function(d){return d.querySelector(e)})};a.selectAll=function(e){return c(function(d){return Q(d.querySelectorAll(e))})};a.filter=function(e){for(var d=[],h,f,i,k=0,j=a.length;k<j;k++){f=a[k];d.push(h=[]);h.parentNode= a[k];for(var o=0,p=f.length;o<p;o++)if(h=f[o]){d.push(i=e(h));i.parentNode=h;i.parentData=h.__data__}}return y(d)}function g(e){for(var d=0,i=a.length;d<i;d++)for(var f=a[d],h=0,k=f.length;h<k;h++){var j=f[h];if(j)return e.call(j,j.__data__,h)}return null}a.select=function(e){return b(function(d){return d.querySelector(e)})};a.selectAll=function(e){return c(function(d){return Q(d.querySelectorAll(e))})};a.filter=function(e){for(var d=[],i,f,h,k=0,j=a.length;k<j;k++){f=a[k];d.push(i=[]);i.parentNode=
f.parentNode;h.parentData=f.parentData;for(var o=0,p=f.length;o<p;o++)if((i=f[o])&&e.call(i,i.__data__,o))h.push(i)}return y(d)};a.data=function(e,d){function h(l,n){function q(Aa){return{__data__:Aa,appendChild:function(H){return l.parentNode.appendChild(H)},insertBefore:function(H,Ba){return l.parentNode.insertBefore(H,Ba)},querySelector:function(H){return l.parentNode.querySelector(H)}}}var m=0,r=l.length,t=n.length,s=Math.min(r,t),u=Math.max(r,t),z=[],A=[],v=[],w,B;if(d){s={};u=[];var E;B=n.length; f.parentNode;i.parentData=f.parentData;for(var o=0,p=f.length;o<p;o++)if((h=f[o])&&e.call(h,h.__data__,o))i.push(h)}return y(d)};a.data=function(e,d){function i(l,n){function q(Ba){return{__data__:Ba,appendChild:function(H){return l.parentNode.appendChild(H)},insertBefore:function(H,Ca){return l.parentNode.insertBefore(H,Ca)},querySelector:function(H){return l.parentNode.querySelector(H)}}}var m=0,r=l.length,t=n.length,s=Math.min(r,t),u=Math.max(r,t),z=[],A=[],v=[],w,B;if(d){s={};u=[];var E;B=n.length;
for(m=0;m<r;m++){E=d.call(w=l[m],w.__data__,m);if(E in s)v[B++]=l[m];else{s[E]=w;u.push(E)}}for(m=0;m<t;m++){if(w=s[E=d.call(n,B=n[m],m)]){w.__data__=B;z[m]=w;A[m]=v[m]=null}else{A[m]=q(B);z[m]=v[m]=null}delete s[E]}for(m=0;m<r;m++)if(u[m]in s)v[m]=l[m]}else{for(;m<s;m++){w=l[m];B=n[m];if(w){w.__data__=B;z[m]=w;A[m]=v[m]=null}else{A[m]=q(B);z[m]=v[m]=null}}for(;m<t;m++){A[m]=q(n[m]);z[m]=v[m]=null}for(;m<u;m++){v[m]=l[m];A[m]=z[m]=null}}A.parentNode=z.parentNode=v.parentNode=l.parentNode;A.parentData= for(m=0;m<r;m++){E=d.call(w=l[m],w.__data__,m);if(E in s)v[B++]=l[m];else{s[E]=w;u.push(E)}}for(m=0;m<t;m++){if(w=s[E=d.call(n,B=n[m],m)]){w.__data__=B;z[m]=w;A[m]=v[m]=null}else{A[m]=q(B);z[m]=v[m]=null}delete s[E]}for(m=0;m<r;m++)if(u[m]in s)v[m]=l[m]}else{for(;m<s;m++){w=l[m];B=n[m];if(w){w.__data__=B;z[m]=w;A[m]=v[m]=null}else{A[m]=q(B);z[m]=v[m]=null}}for(;m<t;m++){A[m]=q(n[m]);z[m]=v[m]=null}for(;m<u;m++){v[m]=l[m];A[m]=z[m]=null}}A.parentNode=z.parentNode=v.parentNode=l.parentNode;A.parentData=
z.parentData=v.parentData=l.parentData;f.push(A);i.push(z);k.push(v)}var f=[],i=[],k=[],j=-1,o=a.length,p;if(typeof e=="function")for(;++j<o;)h(p=a[j],e.call(p,p.parentData,j));else for(;++j<o;)h(p=a[j],e);j=y(i);j.enter=function(){return y(f)};j.exit=function(){return y(k)};return j};a.each=function(e){for(var d=0,h=a.length;d<h;d++)for(var f=a[d],i=0,k=f.length;i<k;i++){var j=f[i];j&&e.call(j,j.__data__,i)}return a};a.empty=function(){return!g(function(){return true})};a.node=function(){return g(function(){return this})}; z.parentData=v.parentData=l.parentData;f.push(A);h.push(z);k.push(v)}var f=[],h=[],k=[],j=-1,o=a.length,p;if(typeof e=="function")for(;++j<o;)i(p=a[j],e.call(p,p.parentData,j));else for(;++j<o;)i(p=a[j],e);j=y(h);j.enter=function(){return y(f)};j.exit=function(){return y(k)};return j};a.each=function(e){for(var d=0,i=a.length;d<i;d++)for(var f=a[d],h=0,k=f.length;h<k;h++){var j=f[h];j&&e.call(j,j.__data__,h)}return a};a.empty=function(){return!g(function(){return true})};a.node=function(){return g(function(){return this})};
a.attr=function(e,d){function h(){this.removeAttribute(e)}function f(){this.removeAttributeNS(e.space,e.local)}function i(){this.setAttribute(e,d)}function k(){this.setAttributeNS(e.space,e.local,d)}function j(){var p=d.apply(this,arguments);p==null?this.removeAttribute(e):this.setAttribute(e,p)}function o(){var p=d.apply(this,arguments);p==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,p)}e=d3.ns.qualify(e);if(arguments.length<2)return g(e.local?function(){return this.getAttributeNS(e.space, a.attr=function(e,d){function i(){this.removeAttribute(e)}function f(){this.removeAttributeNS(e.space,e.local)}function h(){this.setAttribute(e,d)}function k(){this.setAttributeNS(e.space,e.local,d)}function j(){var p=d.apply(this,arguments);p==null?this.removeAttribute(e):this.setAttribute(e,p)}function o(){var p=d.apply(this,arguments);p==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,p)}e=d3.ns.qualify(e);if(arguments.length<2)return g(e.local?function(){return this.getAttributeNS(e.space,
e.local)}:function(){return this.getAttribute(e)});return a.each(d==null?e.local?f:h:typeof d=="function"?e.local?o:j:e.local?k:i)};a.classed=function(e,d){function h(){var j=this.className;k.lastIndex=0;if(!k.test(j))this.className=ca(j+" "+e)}function f(){var j=ca(this.className.replace(k," "));this.className=j.length?j:null}function i(){(d.apply(this,arguments)?h:f).call(this)}var k=RegExp("(^|\\s+)"+d3.requote(e)+"(\\s+|$)","g");if(arguments.length<2)return g(function(){k.lastIndex=0;return k.test(this.className)}); e.local)}:function(){return this.getAttribute(e)});return a.each(d==null?e.local?f:i:typeof d=="function"?e.local?o:j:e.local?k:h)};a.classed=function(e,d){function i(){var j=this.className;k.lastIndex=0;if(!k.test(j))this.className=ca(j+" "+e)}function f(){var j=ca(this.className.replace(k," "));this.className=j.length?j:null}function h(){(d.apply(this,arguments)?i:f).call(this)}var k=RegExp("(^|\\s+)"+d3.requote(e)+"(\\s+|$)","g");if(arguments.length<2)return g(function(){k.lastIndex=0;return k.test(this.className)});
return a.each(typeof d=="function"?i:d?h:f)};a.style=function(e,d,h){function f(){this.style.removeProperty(e)}function i(){this.style.setProperty(e,d,h)}function k(){var j=d.apply(this,arguments);j==null?this.style.removeProperty(e):this.style.setProperty(e,j,h)}if(arguments.length<3)h=null;if(arguments.length<2)return g(function(){return window.getComputedStyle(this,null).getPropertyValue(e)});return a.each(d==null?f:typeof d=="function"?k:i)};a.property=function(e,d){function h(){delete this[e]} return a.each(typeof d=="function"?h:d?i:f)};a.style=function(e,d,i){function f(){this.style.removeProperty(e)}function h(){this.style.setProperty(e,d,i)}function k(){var j=d.apply(this,arguments);j==null?this.style.removeProperty(e):this.style.setProperty(e,j,i)}if(arguments.length<3)i=null;if(arguments.length<2)return g(function(){return window.getComputedStyle(this,null).getPropertyValue(e)});return a.each(d==null?f:typeof d=="function"?k:h)};a.property=function(e,d){function i(){delete this[e]}
function f(){this[e]=d}function i(){var k=d.apply(this,arguments);if(k==null)delete this[e];else this[e]=k}e=d3.ns.qualify(e);if(arguments.length<2)return g(function(){return this[e]});return a.each(d==null?h:typeof d=="function"?i:f)};a.text=function(e){function d(){this.appendChild(document.createTextNode(e))}function h(){var f=e.apply(this,arguments);f!=null&&this.appendChild(document.createTextNode(f))}if(arguments.length<1)return g(function(){return this.textContent});a.each(function(){for(;this.lastChild;)this.removeChild(this.lastChild)}); function f(){this[e]=d}function h(){var k=d.apply(this,arguments);if(k==null)delete this[e];else this[e]=k}e=d3.ns.qualify(e);if(arguments.length<2)return g(function(){return this[e]});return a.each(d==null?i:typeof d=="function"?h:f)};a.text=function(e){function d(){this.appendChild(document.createTextNode(e))}function i(){var f=e.apply(this,arguments);f!=null&&this.appendChild(document.createTextNode(f))}if(arguments.length<1)return g(function(){return this.textContent});a.each(function(){for(;this.lastChild;)this.removeChild(this.lastChild)});
return e==null?a:a.each(typeof e=="function"?h:d)};a.html=function(e){function d(){this.innerHTML=e}function h(){this.innerHTML=e.apply(this,arguments)}if(arguments.length<1)return g(function(){return this.innerHTML});return a.each(typeof e=="function"?h:d)};a.append=function(e){function d(f){return f.appendChild(document.createElement(e))}function h(f){return f.appendChild(document.createElementNS(e.space,e.local))}e=d3.ns.qualify(e);return b(e.local?h:d)};a.insert=function(e,d){function h(i){return i.insertBefore(document.createElement(e), return e==null?a:a.each(typeof e=="function"?i:d)};a.html=function(e){function d(){this.innerHTML=e}function i(){this.innerHTML=e.apply(this,arguments)}if(arguments.length<1)return g(function(){return this.innerHTML});return a.each(typeof e=="function"?i:d)};a.append=function(e){function d(f){return f.appendChild(document.createElement(e))}function i(f){return f.appendChild(document.createElementNS(e.space,e.local))}e=d3.ns.qualify(e);return b(e.local?i:d)};a.insert=function(e,d){function i(h){return h.insertBefore(document.createElement(e),
i.querySelector(d))}function f(i){return i.insertBefore(document.createElementNS(e.space,e.local),i.querySelector(d))}e=d3.ns.qualify(e);return b(e.local?f:h)};a.remove=function(){return b(function(e){var d=e.parentNode;d.removeChild(e);return d})};a.sort=function(e){e=Ca.apply(this,arguments);for(var d=0,h=a.length;d<h;d++){var f=a[d];f.sort(e);for(var i=1,k=f.length,j=f[0];i<k;i++){var o=f[i];if(o){j&&j.parentNode.insertBefore(o,j.nextSibling);j=o}}}return a};a.on=function(e,d){e="on"+e;return a.each(function(h, h.querySelector(d))}function f(h){return h.insertBefore(document.createElementNS(e.space,e.local),h.querySelector(d))}e=d3.ns.qualify(e);return b(e.local?f:i)};a.remove=function(){return b(function(e){var d=e.parentNode;d.removeChild(e);return d})};a.sort=function(e){e=Da.apply(this,arguments);for(var d=0,i=a.length;d<i;d++){var f=a[d];f.sort(e);for(var h=1,k=f.length,j=f[0];h<k;h++){var o=f[h];if(o){j&&j.parentNode.insertBefore(o,j.nextSibling);j=o}}}return a};a.on=function(e,d){e="on"+e;return a.each(function(i,
f){this[e]=function(i){var k=d3.event;d3.event=i;try{d.call(this,h,f)}finally{d3.event=k}}})};a.transition=function(){return W(a)};a.call=da;return a}function Ca(a){if(!arguments.length)a=d3.ascending;return function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function W(a){function b(l){var n=true,q=-1;a.each(function(){if(i[++q]!=2){var m=(l-k[q])/j[q],r=this.__transition__,t,s,u=d[q];if(m<1){n=false;if(m<0)return}else m=1;if(i[q]){if(!r||r.active!=g){i[q]=2;return}}else if(!r||r.active>g){i[q]= f){this[e]=function(h){var k=d3.event;d3.event=h;try{d.call(this,i,f)}finally{d3.event=k}}})};a.transition=function(){return W(a)};a.call=da;return a}function Da(a){if(!arguments.length)a=d3.ascending;return function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function W(a){function b(l){var n=true,q=-1;a.each(function(){if(h[++q]!=2){var m=(l-k[q])/j[q],r=this.__transition__,t,s,u=d[q];if(m<1){n=false;if(m<0)return}else m=1;if(h[q]){if(!r||r.active!=g){h[q]=2;return}}else if(!r||r.active>g){h[q]=
2;return}else{i[q]=1;f.start.dispatch.apply(this,arguments);u=d[q]={};r.active=g;for(s in e)u[s]=e[s].apply(this,arguments)}t=p(m);for(s in e)u[s].call(this,t);if(m==1){i[q]=2;if(r.active==g){m=r.owner;if(m==g){delete this.__transition__;h&&this.parentNode.removeChild(this)}X=g;f.end.dispatch.apply(this,arguments);X=0;r.owner=m}}}});return n}var c={},g=X||++Da,e={},d=[],h=false,f=d3.dispatch("start","end"),i=[],k=[],j=[],o,p=d3.ease("cubic-in-out");a.each(function(){(this.__transition__||(this.__transition__= 2;return}else{h[q]=1;f.start.dispatch.apply(this,arguments);u=d[q]={};r.active=g;for(s in e)u[s]=e[s].apply(this,arguments)}t=p(m);for(s in e)u[s].call(this,t);if(m==1){h[q]=2;if(r.active==g){m=r.owner;if(m==g){delete this.__transition__;i&&this.parentNode.removeChild(this)}X=g;f.end.dispatch.apply(this,arguments);X=0;r.owner=m}}}});return n}var c={},g=X||++Ea,e={},d=[],i=false,f=d3.dispatch("start","end"),h=[],k=[],j=[],o,p=d3.ease("cubic-in-out");a.each(function(){(this.__transition__||(this.__transition__=
{})).owner=g});c.delay=function(l){var n=Infinity,q=-1;if(typeof l=="function")a.each(function(){var m=k[++q]=+l.apply(this,arguments);if(m<n)n=m});else{n=+l;a.each(function(){k[++q]=n})}Ea(b,n);return c};c.duration=function(l){var n=-1;if(typeof l=="function"){o=0;a.each(function(){var q=j[++n]=+l.apply(this,arguments);if(q>o)o=q})}else{o=+l;a.each(function(){j[++n]=o})}return c};c.ease=function(l){p=typeof l=="string"?d3.ease(l):l;return c};c.attrTween=function(l,n){function q(r,t){var s=n.call(this, {})).owner=g});c.delay=function(l){var n=Infinity,q=-1;if(typeof l=="function")a.each(function(){var m=k[++q]=+l.apply(this,arguments);if(m<n)n=m});else{n=+l;a.each(function(){k[++q]=n})}Fa(b,n);return c};c.duration=function(l){var n=-1;if(typeof l=="function"){o=0;a.each(function(){var q=j[++n]=+l.apply(this,arguments);if(q>o)o=q})}else{o=+l;a.each(function(){j[++n]=o})}return c};c.ease=function(l){p=typeof l=="string"?d3.ease(l):l;return c};c.attrTween=function(l,n){function q(r,t){var s=n.call(this,
r,t,this.getAttribute(l));return function(u){this.setAttribute(l,s(u))}}function m(r,t){var s=n.call(this,r,t,this.getAttributeNS(l.space,l.local));return function(u){this.setAttributeNS(l.space,l.local,s(u))}}e["attr."+l]=l.local?m:q;return c};c.attr=function(l,n){return c.attrTween(l,ha(n))};c.styleTween=function(l,n,q){if(arguments.length<3)q=null;e["style."+l]=function(m,r){var t=n.call(this,m,r,window.getComputedStyle(this,null).getPropertyValue(l));return function(s){this.style.setProperty(l, r,t,this.getAttribute(l));return function(u){this.setAttribute(l,s(u))}}function m(r,t){var s=n.call(this,r,t,this.getAttributeNS(l.space,l.local));return function(u){this.setAttributeNS(l.space,l.local,s(u))}}e["attr."+l]=l.local?m:q;return c};c.attr=function(l,n){return c.attrTween(l,ha(n))};c.styleTween=function(l,n,q){if(arguments.length<3)q=null;e["style."+l]=function(m,r){var t=n.call(this,m,r,window.getComputedStyle(this,null).getPropertyValue(l));return function(s){this.style.setProperty(l,
t(s),q)}};return c};c.style=function(l,n,q){if(arguments.length<3)q=null;return c.styleTween(l,ha(n),q)};c.select=function(l){var n;l=W(a.select(l)).ease(p);n=-1;l.delay(function(){return k[++n]});n=-1;l.duration(function(){return j[++n]});return l};c.selectAll=function(l){var n;l=W(a.selectAll(l)).ease(p);n=-1;l.delay(function(q,m){return k[m?n:++n]});n=-1;l.duration(function(q,m){return j[m?n:++n]});return l};c.remove=function(){h=true;return c};c.each=function(l,n){f[l].add(n);return c};c.call= t(s),q)}};return c};c.style=function(l,n,q){if(arguments.length<3)q=null;return c.styleTween(l,ha(n),q)};c.select=function(l){var n;l=W(a.select(l)).ease(p);n=-1;l.delay(function(){return k[++n]});n=-1;l.duration(function(){return j[++n]});return l};c.selectAll=function(l){var n;l=W(a.selectAll(l)).ease(p);n=-1;l.delay(function(q,m){return k[m?n:++n]});n=-1;l.duration(function(q,m){return j[m?n:++n]});return l};c.remove=function(){i=true;return c};c.each=function(l,n){f[l].add(n);return c};c.call=
da;return c.delay(0).duration(250)}function ha(a){return typeof a=="function"?function(b,c,g){return d3.interpolate(g,String(a.call(this,b,c)))}:(a=String(a),function(b,c,g){return d3.interpolate(g,a)})}function Ea(a,b){var c=Date.now(),g=false,e=c+b,d=F;if(isFinite(b)){for(;d;){if(d.callback==a){d.then=c;d.delay=b;g=true}else{var h=d.then+d.delay;if(h<e)e=h}d=d.next}g||(F={callback:a,then:c,delay:b,next:F});if(!K){clearTimeout(Y);Y=setTimeout(Fa,Math.max(24,e-c))}}}function Fa(){K=setInterval(Ga, da;return c.delay(0).duration(250)}function ha(a){return typeof a=="function"?function(b,c,g){return d3.interpolate(g,String(a.call(this,b,c)))}:(a=String(a),function(b,c,g){return d3.interpolate(g,a)})}function Fa(a,b){var c=Date.now(),g=false,e=c+b,d=F;if(isFinite(b)){for(;d;){if(d.callback==a){d.then=c;d.delay=b;g=true}else{var i=d.then+d.delay;if(i<e)e=i}d=d.next}g||(F={callback:a,then:c,delay:b,next:F});if(!K){clearTimeout(Y);Y=setTimeout(Ga,Math.max(24,e-c))}}}function Ga(){K=setInterval(Ha,
24);Y=0}function Ga(){for(var a,b=Date.now(),c=F;c;){a=b-c.then;if(a>c.delay)c.flush=c.callback(a);c=c.next}a=null;for(b=F;b;)b=b.flush?a?a.next=b.next:F=b.next:(a=b).next;a||(K=clearInterval(K))}function Ha(a){return a.innerRadius}function Ia(a){return a.outerRadius}function ia(a){return a.startAngle}function ja(a){return a.endAngle}function Z(a,b,c,g){var e=[],d=-1,h=b.length,f=typeof c=="function",i=typeof g=="function",k;if(f&&i)for(;++d<h;)e.push([c.call(a,k=b[d],d),g.call(a,k,d)]);else if(f)for(;++d< 24);Y=0}function Ha(){for(var a,b=Date.now(),c=F;c;){a=b-c.then;if(a>c.delay)c.flush=c.callback(a);c=c.next}a=null;for(b=F;b;)b=b.flush?a?a.next=b.next:F=b.next:(a=b).next;a||(K=clearInterval(K))}function Ia(a){return a.innerRadius}function Ja(a){return a.outerRadius}function ia(a){return a.startAngle}function ja(a){return a.endAngle}function Z(a,b,c,g){var e=[],d=-1,i=b.length,f=typeof c=="function",h=typeof g=="function",k;if(f&&h)for(;++d<i;)e.push([c.call(a,k=b[d],d),g.call(a,k,d)]);else if(f)for(;++d<
h;)e.push([c.call(a,b[d],d),g]);else if(i)for(;++d<h;)e.push([c,g.call(a,b[d],d)]);else for(;++d<h;)e.push([c,g]);return e}function ka(a){return a[0]}function la(a){return a[1]}function I(a){var b=[],c=0,g=a.length,e=a[0];for(b.push(e[0],",",e[1]);++c<g;)b.push("L",(e=a[c])[0],",",e[1]);return b.join("")}function ma(a,b){if(b.length<1||a.length!=b.length&&a.length!=b.length+2)return I(a);var c=a.length!=b.length,g="",e=a[0],d=a[1],h=b[0],f=h,i=1;if(c){g+="Q"+(d[0]-h[0]*2/3)+","+(d[1]-h[1]*2/3)+","+ i;)e.push([c.call(a,b[d],d),g]);else if(h)for(;++d<i;)e.push([c,g.call(a,b[d],d)]);else for(;++d<i;)e.push([c,g]);return e}function ka(a){return a[0]}function la(a){return a[1]}function I(a){var b=[],c=0,g=a.length,e=a[0];for(b.push(e[0],",",e[1]);++c<g;)b.push("L",(e=a[c])[0],",",e[1]);return b.join("")}function ma(a,b){if(b.length<1||a.length!=b.length&&a.length!=b.length+2)return I(a);var c=a.length!=b.length,g="",e=a[0],d=a[1],i=b[0],f=i,h=1;if(c){g+="Q"+(d[0]-i[0]*2/3)+","+(d[1]-i[1]*2/3)+","+
d[0]+","+d[1];e=a[1];i=2}if(b.length>1){f=b[1];d=a[i];i++;g+="C"+(e[0]+h[0])+","+(e[1]+h[1])+","+(d[0]-f[0])+","+(d[1]-f[1])+","+d[0]+","+d[1];for(e=2;e<b.length;e++,i++){d=a[i];f=b[e];g+="S"+(d[0]-f[0])+","+(d[1]-f[1])+","+d[0]+","+d[1]}}if(c){c=a[i];g+="Q"+(d[0]+f[0]*2/3)+","+(d[1]+f[1]*2/3)+","+c[0]+","+c[1]}return g}function na(a,b){for(var c=[],g=(1-b)/2,e=a[0],d=a[1],h=a[2],f=2,i=a.length;++f<i;){c.push([g*(h[0]-e[0]),g*(h[1]-e[1])]);e=d;d=h;h=a[f]}c.push([g*(h[0]-e[0]),g*(h[1]-e[1])]);return c} d[0]+","+d[1];e=a[1];h=2}if(b.length>1){f=b[1];d=a[h];h++;g+="C"+(e[0]+i[0])+","+(e[1]+i[1])+","+(d[0]-f[0])+","+(d[1]-f[1])+","+d[0]+","+d[1];for(e=2;e<b.length;e++,h++){d=a[h];f=b[e];g+="S"+(d[0]-f[0])+","+(d[1]-f[1])+","+d[0]+","+d[1]}}if(c){c=a[h];g+="Q"+(d[0]+f[0]*2/3)+","+(d[1]+f[1]*2/3)+","+c[0]+","+c[1]}return g}function na(a,b){for(var c=[],g=(1-b)/2,e=a[0],d=a[1],i=a[2],f=2,h=a.length;++f<h;){c.push([g*(i[0]-e[0]),g*(i[1]-e[1])]);e=d;d=i;i=a[f]}c.push([g*(i[0]-e[0]),g*(i[1]-e[1])]);return c}
function C(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function L(a,b,c){a.push("C",C(oa,b),",",C(oa,c),",",C(pa,b),",",C(pa,c),",",C(M,b),",",C(M,c))}function Ja(){return 0}function Ka(a){return a.source}function La(a){return a.target}function Ma(a){return a.radius}d3={version:"0.30.3"};if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(a){function b(){}b.prototype=a;return new b};d3.ascending=function(a,b){return a<b?-1:a>b?1:0};d3.descending=function(a, function C(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]}function L(a,b,c){a.push("C",C(oa,b),",",C(oa,c),",",C(pa,b),",",C(pa,c),",",C(M,b),",",C(M,c))}function Ka(){return 0}function La(a){return a.source}function Ma(a){return a.target}function Na(a){return a.radius}d3={version:"0.30.4"};if(!Date.now)Date.now=function(){return+new Date};if(!Object.create)Object.create=function(a){function b(){}b.prototype=a;return new b};d3.ascending=function(a,b){return a<b?-1:a>b?1:0};d3.descending=function(a,
b){return b<a?-1:b>a?1:0};d3.min=function(a,b){var c=0,g=a.length,e=a[0],d;if(arguments.length==1)for(;++c<g;){if(e>(d=a[c]))e=d}else for(e=b(a[0]);++c<g;)if(e>(d=b(a[c])))e=d;return e};d3.max=function(a,b){var c=0,g=a.length,e=a[0],d;if(arguments.length==1)for(;++c<g;){if(e<(d=a[c]))e=d}else for(e=b(e);++c<g;)if(e<(d=b(a[c])))e=d;return e};d3.nest=function(){function a(d,h){if(d>=c.length)return e?e.call(b,h):g?h.sort(g):h;for(var f=-1,i=h.length,k=c[d],j,o=[],p,l={};++f<i;)if((j=k(p=h[f]))in l)l[j].push(p); b){return b<a?-1:b>a?1:0};d3.min=function(a,b){var c=0,g=a.length,e=a[0],d;if(arguments.length==1)for(;++c<g;){if(e>(d=a[c]))e=d}else for(e=b(a[0]);++c<g;)if(e>(d=b(a[c])))e=d;return e};d3.max=function(a,b){var c=0,g=a.length,e=a[0],d;if(arguments.length==1)for(;++c<g;){if(e<(d=a[c]))e=d}else for(e=b(e);++c<g;)if(e<(d=b(a[c])))e=d;return e};d3.nest=function(){function a(d,i){if(d>=c.length)return e?e.call(b,i):g?i.sort(g):i;for(var f=-1,h=i.length,k=c[d],j,o=[],p,l={};++f<h;)if((j=k(p=i[f]))in l)l[j].push(p);
else{l[j]=[p];o.push(j)}d++;f=-1;for(i=o.length;++f<i;){p=l[j=o[f]];l[j]=a(d,p)}return l}var b={},c=[],g,e;b.map=function(d){return a(0,d)};b.key=function(d){c.push(d);return b};b.sortKeys=function(){return b};b.sortValues=function(d){g=d;return b};b.rollup=function(d){e=d;return b};return b};d3.keys=function(a){var b=[],c;for(c in a)b.push(c);return b};d3.values=function(a){var b=[],c;for(c in a)b.push(a[c]);return b};d3.entries=function(a){var b=[],c;for(c in a)b.push({key:c,value:a[c]});return b}; else{l[j]=[p];o.push(j)}d++;f=-1;for(h=o.length;++f<h;){p=l[j=o[f]];l[j]=a(d,p)}return l}var b={},c=[],g,e;b.map=function(d){return a(0,d)};b.key=function(d){c.push(d);return b};b.sortKeys=function(){return b};b.sortValues=function(d){g=d;return b};b.rollup=function(d){e=d;return b};return b};d3.keys=function(a){var b=[],c;for(c in a)b.push(c);return b};d3.values=function(a){var b=[],c;for(c in a)b.push(a[c]);return b};d3.entries=function(a){var b=[],c;for(c in a)b.push({key:c,value:a[c]});return b};
d3.merge=function(a){return Array.prototype.concat.apply([],a)};d3.split=function(a,b){var c=[],g=[],e,d=-1,h=a.length;if(arguments.length<2)b=qa;for(;++d<h;)if(b.call(g,e=a[d],d))g=[];else{g.length||c.push(g);g.push(e)}return c};d3.range=function(a,b,c){if(arguments.length==1){b=a;a=0}if(c==null)c=1;if((b-a)/c==Infinity)throw Error("infinite range");var g=[],e=-1,d;if(c<0)for(;(d=a+c*++e)>b;)g.push(d);else for(;(d=a+c*++e)<b;)g.push(d);return g};d3.requote=function(a){return a.replace(Na,"\\$&")}; d3.merge=function(a){return Array.prototype.concat.apply([],a)};d3.split=function(a,b){var c=[],g=[],e,d=-1,i=a.length;if(arguments.length<2)b=ra;for(;++d<i;)if(b.call(g,e=a[d],d))g=[];else{g.length||c.push(g);g.push(e)}return c};d3.range=function(a,b,c){if(arguments.length==1){b=a;a=0}if(c==null)c=1;if((b-a)/c==Infinity)throw Error("infinite range");var g=[],e=-1,d;if(c<0)for(;(d=a+c*++e)>b;)g.push(d);else for(;(d=a+c*++e)<b;)g.push(d);return g};d3.requote=function(a){return a.replace(Oa,"\\$&")};
var Na=/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;d3.xhr=function(a,b,c){var g=new XMLHttpRequest;if(arguments.length<3)c=b;else b&&g.overrideMimeType(b);g.open("GET",a,true);g.onreadystatechange=function(){if(g.readyState==4)c(g.status<300?g:null)};g.send(null)};d3.text=function(a,b,c){if(arguments.length<3){c=b;b=null}d3.xhr(a,b,function(g){c(g&&g.responseText)})};d3.json=function(a,b){d3.text(a,"application/json",function(c){b(c?JSON.parse(c):null)})};d3.html=function(a,b){d3.text(a,"text/html",function(c){if(c!= var Oa=/[\\\^\$\*\+\?\[\]\(\)\.\{\}]/g;d3.xhr=function(a,b,c){var g=new XMLHttpRequest;if(arguments.length<3)c=b;else b&&g.overrideMimeType(b);g.open("GET",a,true);g.onreadystatechange=function(){if(g.readyState==4)c(g.status<300?g:null)};g.send(null)};d3.text=function(a,b,c){if(arguments.length<3){c=b;b=null}d3.xhr(a,b,function(g){c(g&&g.responseText)})};d3.json=function(a,b){d3.text(a,"application/json",function(c){b(c?JSON.parse(c):null)})};d3.html=function(a,b){d3.text(a,"text/html",function(c){if(c!=
null){var g=document.createRange();g.selectNode(document.body);c=g.createContextualFragment(c)}b(c)})};d3.xml=function(a,b,c){if(arguments.length<3){c=b;b=null}d3.xhr(a,b,function(g){c(g&&g.responseXML)})};d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)], null){var g=document.createRange();g.selectNode(document.body);c=g.createContextualFragment(c)}b(c)})};d3.xml=function(a,b,c){if(arguments.length<3){c=b;b=null}d3.xhr(a,b,function(g){c(g&&g.responseXML)})};d3.ns={prefix:{svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},qualify:function(a){var b=a.indexOf(":");return b<0?a:{space:d3.ns.prefix[a.substring(0,b)],
local:a.substring(b+1)}}};d3.dispatch=function(){for(var a={},b,c=0,g=arguments.length;c<g;c++){b=arguments[c];a[b]=ra(b)}return a};d3.format=function(a){a=Oa.exec(a);var b=a[1]||" ",c=a[5],g=+a[6],e=a[7],d=a[8],h=a[9];if(d)d=d.substring(1);if(c)b="0";if(h=="d")d="0";return function(f){if(h=="d"&&f%1)return"";if(d)f=(+f).toFixed(d);else f+="";if(e){for(var i=f.lastIndexOf("."),k=i>=0?f.substring(i):(i=f.length,""),j=[];i>0;)j.push(f.substring(i-=3,i+3));f=j.reverse().join(",")+k}i=f.length;if(i<g)f= local:a.substring(b+1)}}};d3.dispatch=function(){for(var a={},b,c=0,g=arguments.length;c<g;c++){b=arguments[c];a[b]=sa(b)}return a};d3.format=function(a){a=Pa.exec(a);var b=a[1]||" ",c=qa[a[3]]||qa["-"],g=a[5],e=+a[6],d=a[7],i=a[8],f=a[9];if(i)i=i.substring(1);if(g)b="0";if(f=="d")i="0";return function(h){h=+h;var k=h<0&&(h=-h);if(f=="d"&&h%1)return"";h=i?h.toFixed(i):""+h;if(d){for(var j=h.lastIndexOf("."),o=j>=0?h.substring(j):(j=h.length,""),p=[];j>0;)p.push(h.substring(j-=3,j+3));h=p.reverse().join(",")+
Array(g-i+1).join(b)+f;return f}};var Oa=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,Pa=R(2),Qa=R(3),Ra={linear:function(){return sa},poly:R,quad:function(){return Pa},cubic:function(){return Qa},sin:function(){return ta},exp:function(){return ua},circle:function(){return va},elastic:function(a,b){var c;if(arguments.length<2)b=0.45;if(arguments.length<1){a=1;c=b/4}else c=b/(2*Math.PI)*Math.asin(1/a);return function(g){return 1+a*Math.pow(2,10*-g)*Math.sin((g-c)*2*Math.PI/ o}k=(h=c(k,h)).length;if(k<e)h=Array(e-k+1).join(b)+h;return h}};var Pa=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,qa={"+":function(a,b){return(a?"":"+")+b}," ":function(a,b){return(a?"":" ")+b},"-":function(a,b){return a?""+b:b}},Qa=R(2),Ra=R(3),Sa={linear:function(){return ta},poly:R,quad:function(){return Qa},cubic:function(){return Ra},sin:function(){return ua},exp:function(){return va},circle:function(){return wa},elastic:function(a,b){var c;if(arguments.length<
b)}},back:function(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}},bounce:function(){return wa}},Sa={"in":function(a){return a},out:ea,"in-out":fa,"out-in":function(a){return fa(ea(a))}};d3.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a;b=b>=0?a.substring(b+1):"in";return Sa[b](Ra[c].apply(null,Array.prototype.slice.call(arguments,1)))};d3.event=null;d3.interpolate=function(a,b){if(typeof b=="number")return d3.interpolateNumber(+a,b);if(typeof b=="string")return b in 2)b=0.45;if(arguments.length<1){a=1;c=b/4}else c=b/(2*Math.PI)*Math.asin(1/a);return function(g){return 1+a*Math.pow(2,10*-g)*Math.sin((g-c)*2*Math.PI/b)}},back:function(a){a||(a=1.70158);return function(b){return b*b*((a+1)*b-a)}},bounce:function(){return xa}},Ta={"in":function(a){return a},out:ea,"in-out":fa,"out-in":function(a){return fa(ea(a))}};d3.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a;b=b>=0?a.substring(b+1):"in";return Ta[b](Sa[c].apply(null,Array.prototype.slice.call(arguments,
G||/^(#|rgb\(|hsl\()/.test(b)?d3.interpolateRgb(String(a),b):d3.interpolateString(String(a),b);if(b instanceof Array)return d3.interpolateArray(a,b);return d3.interpolateObject(a,b)};d3.interpolateNumber=function(a,b){b-=a;return function(c){return a+b*c}};d3.interpolateRound=function(a,b){b-=a;return function(c){return Math.round(a+b*c)}};d3.interpolateString=function(a,b){var c,g,e=0,d=[],h=[],f,i;for(g=0;c=$.exec(b);++g){c.index&&d.push(b.substring(e,c.index));h.push({i:d.length,x:c[0]});d.push(null); 1)))};d3.event=null;d3.interpolate=function(a,b){if(typeof b=="number")return d3.interpolateNumber(+a,b);if(typeof b=="string")return b in G||/^(#|rgb\(|hsl\()/.test(b)?d3.interpolateRgb(String(a),b):d3.interpolateString(String(a),b);if(b instanceof Array)return d3.interpolateArray(a,b);return d3.interpolateObject(a,b)};d3.interpolateNumber=function(a,b){b-=a;return function(c){return a+b*c}};d3.interpolateRound=function(a,b){b-=a;return function(c){return Math.round(a+b*c)}};d3.interpolateString=
e=$.lastIndex}e<b.length&&d.push(b.substring(e));g=0;for(f=h.length;(c=$.exec(a))&&g<f;++g){i=h[g];if(i.x==c[0]){if(i.i)if(d[i.i+1]==null){d[i.i-1]+=i.x;d.splice(i.i,1);for(c=g+1;c<f;++c)h[c].i--}else{d[i.i-1]+=i.x+d[i.i+1];d.splice(i.i,2);for(c=g+1;c<f;++c)h[c].i-=2}else if(d[i.i+1]==null)d[i.i]=i.x;else{d[i.i]=i.x+d[i.i+1];d.splice(i.i+1,1);for(c=g+1;c<f;++c)h[c].i--}h.splice(g,1);f--;g--}else i.x=d3.interpolateNumber(parseFloat(c[0]),parseFloat(i.x))}for(;g<f;){i=h.pop();if(d[i.i+1]==null)d[i.i]= function(a,b){var c,g,e=0,d=[],i=[],f,h;for(g=0;c=$.exec(b);++g){c.index&&d.push(b.substring(e,c.index));i.push({i:d.length,x:c[0]});d.push(null);e=$.lastIndex}e<b.length&&d.push(b.substring(e));g=0;for(f=i.length;(c=$.exec(a))&&g<f;++g){h=i[g];if(h.x==c[0]){if(h.i)if(d[h.i+1]==null){d[h.i-1]+=h.x;d.splice(h.i,1);for(c=g+1;c<f;++c)i[c].i--}else{d[h.i-1]+=h.x+d[h.i+1];d.splice(h.i,2);for(c=g+1;c<f;++c)i[c].i-=2}else if(d[h.i+1]==null)d[h.i]=h.x;else{d[h.i]=h.x+d[h.i+1];d.splice(h.i+1,1);for(c=g+1;c<
i.x;else{d[i.i]=i.x+d[i.i+1];d.splice(i.i+1,1)}f--}if(d.length==1)return d[0]==null?h[0].x:function(){return b};return function(k){for(g=0;g<f;++g)d[(i=h[g]).i]=i.x(k);return d.join("")}};d3.interpolateRgb=function(a,b){a=d3.rgb(a);b=d3.rgb(b);var c=a.r,g=a.g,e=a.b,d=b.r-c,h=b.g-g,f=b.b-e;return function(i){return"rgb("+Math.round(c+d*i)+","+Math.round(g+h*i)+","+Math.round(e+f*i)+")"}};d3.interpolateArray=function(a,b){var c=[],g=[],e=a.length,d=b.length,h=Math.min(a.length,b.length),f;for(f=0;f< f;++c)i[c].i--}i.splice(g,1);f--;g--}else h.x=d3.interpolateNumber(parseFloat(c[0]),parseFloat(h.x))}for(;g<f;){h=i.pop();if(d[h.i+1]==null)d[h.i]=h.x;else{d[h.i]=h.x+d[h.i+1];d.splice(h.i+1,1)}f--}if(d.length==1)return d[0]==null?i[0].x:function(){return b};return function(k){for(g=0;g<f;++g)d[(h=i[g]).i]=h.x(k);return d.join("")}};d3.interpolateRgb=function(a,b){a=d3.rgb(a);b=d3.rgb(b);var c=a.r,g=a.g,e=a.b,d=b.r-c,i=b.g-g,f=b.b-e;return function(h){return"rgb("+Math.round(c+d*h)+","+Math.round(g+
h;++f)c.push(d3.interpolate(a[f],b[f]));for(;f<e;++f)g[f]=a[f];for(;f<d;++f)g[f]=b[f];return function(i){for(f=0;f<h;++f)g[f]=c[f](i);return g}};d3.interpolateObject=function(a,b){var c={},g={},e;for(e in a)if(e in b)c[e]=(e in Ta||/\bcolor\b/.test(e)?d3.interpolateRgb:d3.interpolate)(a[e],b[e]);else g[e]=a[e];for(e in b)e in a||(g[e]=b[e]);return function(d){for(e in c)g[e]=c[e](d);return g}};var $=/[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,Ta={background:1,fill:1,stroke:1};d3.rgb=function(a, i*h)+","+Math.round(e+f*h)+")"}};d3.interpolateArray=function(a,b){var c=[],g=[],e=a.length,d=b.length,i=Math.min(a.length,b.length),f;for(f=0;f<i;++f)c.push(d3.interpolate(a[f],b[f]));for(;f<e;++f)g[f]=a[f];for(;f<d;++f)g[f]=b[f];return function(h){for(f=0;f<i;++f)g[f]=c[f](h);return g}};d3.interpolateObject=function(a,b){var c={},g={},e;for(e in a)if(e in b)c[e]=(e in Ua||/\bcolor\b/.test(e)?d3.interpolateRgb:d3.interpolate)(a[e],b[e]);else g[e]=a[e];for(e in b)e in a||(g[e]=b[e]);return function(d){for(e in c)g[e]=
b,c){return arguments.length==1?T(""+a,J,ga):J(~~a,~~b,~~c)};var G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b", c[e](d);return g}};var $=/[-+]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)(?:[eE][-]?\d+)?/g,Ua={background:1,fill:1,stroke:1};d3.rgb=function(a,b,c){return arguments.length==1?T(""+a,J,ga):J(~~a,~~b,~~c)};var G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",
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", 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",
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", 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",
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", 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",
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", 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",
salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},aa;for(aa in G)G[aa]=T(G[aa],J,ga);d3.hsl=function(a,b,c){return arguments.length== 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",
1?T(""+a,ya,V):V(+a,+b,+c)};var N=y([[document]]);N[0].parentNode=document.documentElement;d3.select=function(a){return typeof a=="string"?N.select(a):y([[a]])};d3.selectAll=function(a){return typeof a=="string"?N.selectAll(a):y([Q(a)])};d3.transition=N.transition;var Da=0,X=0,F=null,Y=0,K;d3.scale={};d3.scale.linear=function(){function a(j){return k((j-c)*h)}function b(j){var o=Math.min(c,g),p=Math.max(c,g),l=p-o,n=Math.pow(10,Math.floor(Math.log(l/j)/Math.LN10));j=j/(l/n);if(j<=0.15)n*=10;else if(j<= yellow:"#ffff00",yellowgreen:"#9acd32"},aa;for(aa in G)G[aa]=T(G[aa],J,ga);d3.hsl=function(a,b,c){return arguments.length==1?T(""+a,za,V):V(+a,+b,+c)};var N=y([[document]]);N[0].parentNode=document.documentElement;d3.select=function(a){return typeof a=="string"?N.select(a):y([[a]])};d3.selectAll=function(a){return typeof a=="string"?N.selectAll(a):y([Q(a)])};d3.transition=N.transition;var Ea=0,X=0,F=null,Y=0,K;d3.scale={};d3.scale.linear=function(){function a(j){return k((j-c)*i)}function b(j){var o=
0.35)n*=5;else if(j<=0.75)n*=2;return{start:Math.ceil(o/n)*n,stop:Math.floor(p/n)*n+n*0.5,step:n}}var c=0,g=1,e=0,d=1,h=1/(g-c),f=(g-c)/(d-e),i=d3.interpolate,k=i(e,d);a.invert=function(j){return(j-e)*f+c};a.domain=function(j){if(!arguments.length)return[c,g];c=j[0];g=j[1];h=1/(g-c);f=(g-c)/(d-e);return a};a.range=function(j){if(!arguments.length)return[e,d];e=j[0];d=j[1];f=(g-c)/(d-e);k=i(e,d);return a};a.rangeRound=function(j){return a.range(j).interpolate(d3.interpolateRound)};a.interpolate=function(j){if(!arguments.length)return i; Math.min(c,g),p=Math.max(c,g),l=p-o,n=Math.pow(10,Math.floor(Math.log(l/j)/Math.LN10));j=j/(l/n);if(j<=0.15)n*=10;else if(j<=0.35)n*=5;else if(j<=0.75)n*=2;return{start:Math.ceil(o/n)*n,stop:Math.floor(p/n)*n+n*0.5,step:n}}var c=0,g=1,e=0,d=1,i=1/(g-c),f=(g-c)/(d-e),h=d3.interpolate,k=h(e,d);a.invert=function(j){return(j-e)*f+c};a.domain=function(j){if(!arguments.length)return[c,g];c=j[0];g=j[1];i=1/(g-c);f=(g-c)/(d-e);return a};a.range=function(j){if(!arguments.length)return[e,d];e=j[0];d=j[1];f=
k=(i=j)(e,d);return a};a.ticks=function(j){j=b(j);return d3.range(j.start,j.stop,j.step)};a.tickFormat=function(j){j=Math.max(0,-Math.floor(Math.log(b(j).step)/Math.LN10+0.01));return d3.format(",."+j+"f")};return a};d3.scale.log=function(){function a(e){return Math.log(e)/Math.LN10}function b(e){return Math.pow(10,e)}function c(e){return g(a(e))}var g=d3.scale.linear();c.invert=function(e){return b(g.invert(e))};c.domain=function(e){if(!arguments.length)return g.domain().map(b);g.domain(e.map(a)); (g-c)/(d-e);k=h(e,d);return a};a.rangeRound=function(j){return a.range(j).interpolate(d3.interpolateRound)};a.interpolate=function(j){if(!arguments.length)return h;k=(h=j)(e,d);return a};a.ticks=function(j){j=b(j);return d3.range(j.start,j.stop,j.step)};a.tickFormat=function(j){j=Math.max(0,-Math.floor(Math.log(b(j).step)/Math.LN10+0.01));return d3.format(",."+j+"f")};return a};d3.scale.log=function(){function a(e){return Math.log(e)/Math.LN10}function b(e){return Math.pow(10,e)}function c(e){return g(a(e))}
return c};c.range=D(c,g.range);c.rangeRound=D(c,g.rangeRound);c.interpolate=D(c,g.interpolate);c.ticks=function(){var e=g.domain(),d=Math.floor(e[0]),h=Math.ceil(e[1]),f=[];if(e.every(isFinite)){for(;++d<=h;)for(e=1;e<10;e++)f.push(b(d)*e);f.push(b(d))}return f};c.tickFormat=function(){return function(e){return e.toPrecision(1)}};return c};d3.scale.pow=function(){function a(f){return Math.pow(f,d)}function b(f){return Math.pow(f,h)}function c(f){return g(a(f))}var g=d3.scale.linear(),e=d3.scale.linear(), var g=d3.scale.linear();c.invert=function(e){return b(g.invert(e))};c.domain=function(e){if(!arguments.length)return g.domain().map(b);g.domain(e.map(a));return c};c.range=D(c,g.range);c.rangeRound=D(c,g.rangeRound);c.interpolate=D(c,g.interpolate);c.ticks=function(){var e=g.domain(),d=Math.floor(e[0]),i=Math.ceil(e[1]),f=[];if(e.every(isFinite)){for(;++d<=i;)for(e=1;e<10;e++)f.push(b(d)*e);f.push(b(d))}return f};c.tickFormat=function(){return function(e){return e.toPrecision(1)}};return c};d3.scale.pow=
d=1,h=1/d;c.invert=function(f){return b(g.invert(f))};c.domain=function(f){if(!arguments.length)return g.domain().map(b);g.domain(f.map(a));e.domain(f);return c};c.range=D(c,g.range);c.rangeRound=D(c,g.rangeRound);c.inteprolate=D(c,g.interpolate);c.ticks=e.ticks;c.tickFormat=e.tickFormat;c.exponent=function(f){if(!arguments.length)return d;var i=c.domain();d=f;h=1/f;return c.domain(i)};return c};d3.scale.sqrt=function(){return d3.scale.pow().exponent(0.5)};d3.scale.ordinal=function(){function a(d){d= function(){function a(f){return f<0?-Math.pow(-f,d):Math.pow(f,d)}function b(f){return f<0?-Math.pow(-f,i):Math.pow(f,i)}function c(f){return g(a(f))}var g=d3.scale.linear(),e=d3.scale.linear(),d=1,i=1/d;c.invert=function(f){return b(g.invert(f))};c.domain=function(f){if(!arguments.length)return g.domain().map(b);g.domain(f.map(a));e.domain(f);return c};c.range=D(c,g.range);c.rangeRound=D(c,g.rangeRound);c.inteprolate=D(c,g.interpolate);c.ticks=e.ticks;c.tickFormat=e.tickFormat;c.exponent=function(f){if(!arguments.length)return d;
d in c?c[d]:c[d]=b.push(d)-1;return g[d%g.length]}var b=[],c={},g=[],e=0;a.domain=function(d){if(!arguments.length)return b;b=d;c={};for(var h=-1,f=-1,i=b.length;++h<i;){d=b[h];d in c||(c[d]=++f)}return a};a.range=function(d){if(!arguments.length)return g;g=d;return a};a.rangePoints=function(d,h){if(arguments.length<2)h=0;var f=d[0],i=d[1],k=(i-f)/(b.length-1+h);g=b.length==1?[(f+i)/2]:d3.range(f+k*h/2,i+k/2,k);e=0;return a};a.rangeBands=function(d,h){if(arguments.length<2)h=0;var f=d[0],i=d[1],k= var h=c.domain();d=f;i=1/f;return c.domain(h)};return c};d3.scale.sqrt=function(){return d3.scale.pow().exponent(0.5)};d3.scale.ordinal=function(){function a(d){d=d in c?c[d]:c[d]=b.push(d)-1;return g[d%g.length]}var b=[],c={},g=[],e=0;a.domain=function(d){if(!arguments.length)return b;b=d;c={};for(var i=-1,f=-1,h=b.length;++i<h;){d=b[i];d in c||(c[d]=++f)}return a};a.range=function(d){if(!arguments.length)return g;g=d;return a};a.rangePoints=function(d,i){if(arguments.length<2)i=0;var f=d[0],h=d[1],
(i-f)/(b.length+h);g=d3.range(f+k*h,i,k);e=k*(1-h);return a};a.rangeRoundBands=function(d,h){if(arguments.length<2)h=0;var f=d[0],i=d[1],k=i-f,j=Math.floor(k/(b.length+h));g=d3.range(f+Math.round((k-(b.length-h)*j)/2),i,j);e=Math.round(j*(1-h));return a};a.rangeBand=function(){return e};return a};d3.scale.category10=function(){return d3.scale.ordinal().range(Ua)};d3.scale.category20=function(){return d3.scale.ordinal().range(Va)};d3.scale.category20b=function(){return d3.scale.ordinal().range(Wa)}; k=(h-f)/(b.length-1+i);g=b.length==1?[(f+h)/2]:d3.range(f+k*i/2,h+k/2,k);e=0;return a};a.rangeBands=function(d,i){if(arguments.length<2)i=0;var f=d[0],h=d[1],k=(h-f)/(b.length+i);g=d3.range(f+k*i,h,k);e=k*(1-i);return a};a.rangeRoundBands=function(d,i){if(arguments.length<2)i=0;var f=d[0],h=d[1],k=h-f,j=Math.floor(k/(b.length+i));g=d3.range(f+Math.round((k-(b.length-i)*j)/2),h,j);e=Math.round(j*(1-i));return a};a.rangeBand=function(){return e};return a};d3.scale.category10=function(){return d3.scale.ordinal().range(Va)};
d3.scale.category20c=function(){return d3.scale.ordinal().range(Xa)};var Ua=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],Va=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"],Wa=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94", d3.scale.category20=function(){return d3.scale.ordinal().range(Wa)};d3.scale.category20b=function(){return d3.scale.ordinal().range(Xa)};d3.scale.category20c=function(){return d3.scale.ordinal().range(Ya)};var Va=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],Wa=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf",
"#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Xa=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){function a(){for(var h=-1,f=d.length=e.length,i=g.length/f;++h<f;)d[h]=g[~~(h*i)]}function b(h){if(isNaN(h=+h))return NaN;for(var f=0,i=d.length-1;f<=i;){var k=f+i>>1,j=d[k];if(j<h)f=k+1; "#9edae5"],Xa=["#393b79","#5254a3","#6b6ecf","#9c9ede","#637939","#8ca252","#b5cf6b","#cedb9c","#8c6d31","#bd9e39","#e7ba52","#e7cb94","#843c39","#ad494a","#d6616b","#e7969c","#7b4173","#a55194","#ce6dbd","#de9ed6"],Ya=["#3182bd","#6baed6","#9ecae1","#c6dbef","#e6550d","#fd8d3c","#fdae6b","#fdd0a2","#31a354","#74c476","#a1d99b","#c7e9c0","#756bb1","#9e9ac8","#bcbddc","#dadaeb","#636363","#969696","#bdbdbd","#d9d9d9"];d3.scale.quantile=function(){function a(){for(var i=-1,f=d.length=e.length,h=g.length/
else if(j>h)i=k-1;else return k}return i<0?0:i}function c(h){return e[b(h)]}var g=[],e=[],d=[];c.domain=function(h){if(!arguments.length)return g;g=h.filter(function(f){return!isNaN(f)}).sort(d3.ascending);a();return c};c.range=function(h){if(!arguments.length)return e;e=h;a();return c};c.quantiles=function(){return d};return c};d3.scale.quantize=function(){function a(h){return d[Math.max(0,Math.min(e,Math.floor(g*(h-b))))]}var b=0,c=1,g=2,e=1,d=[0,1];a.domain=function(h){if(!arguments.length)return[b, f;++i<f;)d[i]=g[~~(i*h)]}function b(i){if(isNaN(i=+i))return NaN;for(var f=0,h=d.length-1;f<=h;){var k=f+h>>1,j=d[k];if(j<i)f=k+1;else if(j>i)h=k-1;else return k}return h<0?0:h}function c(i){return e[b(i)]}var g=[],e=[],d=[];c.domain=function(i){if(!arguments.length)return g;g=i.filter(function(f){return!isNaN(f)}).sort(d3.ascending);a();return c};c.range=function(i){if(!arguments.length)return e;e=i;a();return c};c.quantiles=function(){return d};return c};d3.scale.quantize=function(){function a(i){return d[Math.max(0,
c];b=h[0];c=h[1];g=d.length/(c-b);return a};a.range=function(h){if(!arguments.length)return d;d=h;g=d.length/(c-b);e=d.length-1;return a};return a};d3.svg={};d3.svg.arc=function(){function a(d,h){var f=b.call(this,d,h),i=c.call(this,d,h),k=g.call(this,d,h)+O,j=e.call(this,d,h)+O,o=j-k,p=o<Math.PI?"0":"1",l=Math.cos(k);k=Math.sin(k);var n=Math.cos(j);j=Math.sin(j);return o>=Ya?f?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+ Math.min(e,Math.floor(g*(i-b))))]}var b=0,c=1,g=2,e=1,d=[0,1];a.domain=function(i){if(!arguments.length)return[b,c];b=i[0];c=i[1];g=d.length/(c-b);return a};a.range=function(i){if(!arguments.length)return d;d=i;g=d.length/(c-b);e=d.length-1;return a};return a};d3.svg={};d3.svg.arc=function(){function a(d,i){var f=b.call(this,d,i),h=c.call(this,d,i),k=g.call(this,d,i)+O,j=e.call(this,d,i)+O,o=j-k,p=o<Math.PI?"0":"1",l=Math.cos(k);k=Math.sin(k);var n=Math.cos(j);j=Math.sin(j);return o>=Za?f?"M0,"+h+
f+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":f?"M"+i*l+","+i*k+"A"+i+","+i+" 0 "+p+",1 "+i*n+","+i*j+"L"+f*n+","+f*j+"A"+f+","+f+" 0 "+p+",0 "+f*l+","+f*k+"Z":"M"+i*l+","+i*k+"A"+i+","+i+" 0 "+p+",1 "+i*n+","+i*j+"L0,0Z"}var b=Ha,c=Ia,g=ia,e=ja;a.innerRadius=function(d){if(!arguments.length)return b;b=x(d);return a};a.outerRadius=function(d){if(!arguments.length)return c;c=x(d);return a};a.startAngle=function(d){if(!arguments.length)return g;g=x(d);return a};a.endAngle=function(d){if(!arguments.length)return e; "A"+h+","+h+" 0 1,1 0,"+-h+"A"+h+","+h+" 0 1,1 0,"+h+"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+-f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":"M0,"+h+"A"+h+","+h+" 0 1,1 0,"+-h+"A"+h+","+h+" 0 1,1 0,"+h+"Z":f?"M"+h*l+","+h*k+"A"+h+","+h+" 0 "+p+",1 "+h*n+","+h*j+"L"+f*n+","+f*j+"A"+f+","+f+" 0 "+p+",0 "+f*l+","+f*k+"Z":"M"+h*l+","+h*k+"A"+h+","+h+" 0 "+p+",1 "+h*n+","+h*j+"L0,0Z"}var b=Ia,c=Ja,g=ia,e=ja;a.innerRadius=function(d){if(!arguments.length)return b;b=x(d);return a};a.outerRadius=function(d){if(!arguments.length)return c;
e=x(d);return a};return a};var O=-Math.PI/2,Ya=2*Math.PI-1.0E-6;d3.svg.line=function(){function a(h){return h.length<1?null:"M"+e(Z(this,h,b,c),d)}var b=ka,c=la,g="linear",e=P[g],d=0.7;a.x=function(h){if(!arguments.length)return b;b=h;return a};a.y=function(h){if(!arguments.length)return c;c=h;return a};a.interpolate=function(h){if(!arguments.length)return g;e=P[g=h];return a};a.tension=function(h){if(!arguments.length)return d;d=h;return a};return a};var P={linear:I,basis:function(a){if(a.length< c=x(d);return a};a.startAngle=function(d){if(!arguments.length)return g;g=x(d);return a};a.endAngle=function(d){if(!arguments.length)return e;e=x(d);return a};return a};var O=-Math.PI/2,Za=2*Math.PI-1.0E-6;d3.svg.line=function(){function a(i){return i.length<1?null:"M"+e(Z(this,i,b,c),d)}var b=ka,c=la,g="linear",e=P[g],d=0.7;a.x=function(i){if(!arguments.length)return b;b=i;return a};a.y=function(i){if(!arguments.length)return c;c=i;return a};a.interpolate=function(i){if(!arguments.length)return g;
3)return I(a);var b=[],c=1,g=a.length,e=a[0],d=e[0],h=e[1],f=[d,d,d,(e=a[1])[0]],i=[h,h,h,e[1]];b.push(d,",",h);for(L(b,f,i);++c<g;){e=a[c];f.shift();f.push(e[0]);i.shift();i.push(e[1]);L(b,f,i)}for(c=-1;++c<2;){f.shift();f.push(e[0]);i.shift();i.push(e[1]);L(b,f,i)}return b.join("")},"basis-closed":function(a){for(var b,c=-1,g=a.length,e=g+4,d,h=[],f=[];++c<4;){d=a[c%g];h.push(d[0]);f.push(d[1])}b=[C(M,h),",",C(M,f)];for(--c;++c<e;){d=a[c%g];h.shift();h.push(d[0]);f.shift();f.push(d[1]);L(b,h,f)}return b.join("")}, e=P[g=i];return a};a.tension=function(i){if(!arguments.length)return d;d=i;return a};return a};var P={linear:I,basis:function(a){if(a.length<3)return I(a);var b=[],c=1,g=a.length,e=a[0],d=e[0],i=e[1],f=[d,d,d,(e=a[1])[0]],h=[i,i,i,e[1]];b.push(d,",",i);for(L(b,f,h);++c<g;){e=a[c];f.shift();f.push(e[0]);h.shift();h.push(e[1]);L(b,f,h)}for(c=-1;++c<2;){f.shift();f.push(e[0]);h.shift();h.push(e[1]);L(b,f,h)}return b.join("")},"basis-closed":function(a){for(var b,c=-1,g=a.length,e=g+4,d,i=[],f=[];++c<
cardinal:function(a,b){if(a.length<3)return I(a);return a[0]+ma(a,na(a,b))},"cardinal-closed":function(a,b){if(a.length<3)return I(a);return a[0]+ma(a,na([a[a.length-2]].concat(a,[a[1]]),b))}},oa=[0,2/3,1/3,0],pa=[0,1/3,2/3,0],M=[0,1/6,2/3,1/6];d3.svg.area=function(){function a(f){return f.length<1?null:"M"+d(Z(this,f,b,g),h)+"L"+d(Z(this,f,b,c).reverse(),h)+"Z"}var b=ka,c=Ja,g=la,e="linear",d=P[e],h=0.7;a.x=function(f){if(!arguments.length)return b;b=f;return a};a.y0=function(f){if(!arguments.length)return c; 4;){d=a[c%g];i.push(d[0]);f.push(d[1])}b=[C(M,i),",",C(M,f)];for(--c;++c<e;){d=a[c%g];i.shift();i.push(d[0]);f.shift();f.push(d[1]);L(b,i,f)}return b.join("")},cardinal:function(a,b){if(a.length<3)return I(a);return a[0]+ma(a,na(a,b))},"cardinal-closed":function(a,b){if(a.length<3)return I(a);return a[0]+ma(a,na([a[a.length-2]].concat(a,[a[1]]),b))}},oa=[0,2/3,1/3,0],pa=[0,1/3,2/3,0],M=[0,1/6,2/3,1/6];d3.svg.area=function(){function a(f){return f.length<1?null:"M"+d(Z(this,f,b,g),i)+"L"+d(Z(this,
c=f;return a};a.y1=function(f){if(!arguments.length)return g;g=f;return a};a.interpolate=function(f){if(!arguments.length)return e;d=P[e=f];return a};a.tension=function(f){if(!arguments.length)return h;h=f;return a};return a};d3.svg.chord=function(){function a(f,i){var k=b(this,c,f,i),j=b(this,g,f,i);return"M"+k.p0+("A"+k.r+","+k.r+" 0 0,1 "+k.p1)+(k.a0==j.a0&&k.a1==j.a1?"Q 0,0 "+k.p0:"Q 0,0 "+j.p0+("A"+j.r+","+j.r+" 0 0,1 "+j.p1)+("Q 0,0 "+k.p0))+"Z"}function b(f,i,k,j){var o=i.call(f,k,j);i=e.call(f, f,b,c).reverse(),i)+"Z"}var b=ka,c=Ka,g=la,e="linear",d=P[e],i=0.7;a.x=function(f){if(!arguments.length)return b;b=f;return a};a.y0=function(f){if(!arguments.length)return c;c=f;return a};a.y1=function(f){if(!arguments.length)return g;g=f;return a};a.interpolate=function(f){if(!arguments.length)return e;d=P[e=f];return a};a.tension=function(f){if(!arguments.length)return i;i=f;return a};return a};d3.svg.chord=function(){function a(f,h){var k=b(this,c,f,h),j=b(this,g,f,h);return"M"+k.p0+("A"+k.r+","+
o,j);k=d.call(f,o,j)+O;f=h.call(f,o,j)+O;return{r:i,a0:k,a1:f,p0:[i*Math.cos(k),i*Math.sin(k)],p1:[i*Math.cos(f),i*Math.sin(f)]}}var c=Ka,g=La,e=Ma,d=ia,h=ja;a.radius=function(f){if(!arguments.length)return e;e=x(f);return a};a.source=function(f){if(!arguments.length)return c;c=x(f);return a};a.target=function(f){if(!arguments.length)return g;g=x(f);return a};a.startAngle=function(f){if(!arguments.length)return d;d=x(f);return a};a.endAngle=function(f){if(!arguments.length)return h;h=x(f);return a}; k.r+" 0 0,1 "+k.p1)+(k.a0==j.a0&&k.a1==j.a1?"Q 0,0 "+k.p0:"Q 0,0 "+j.p0+("A"+j.r+","+j.r+" 0 0,1 "+j.p1)+("Q 0,0 "+k.p0))+"Z"}function b(f,h,k,j){var o=h.call(f,k,j);h=e.call(f,o,j);k=d.call(f,o,j)+O;f=i.call(f,o,j)+O;return{r:h,a0:k,a1:f,p0:[h*Math.cos(k),h*Math.sin(k)],p1:[h*Math.cos(f),h*Math.sin(f)]}}var c=La,g=Ma,e=Na,d=ia,i=ja;a.radius=function(f){if(!arguments.length)return e;e=x(f);return a};a.source=function(f){if(!arguments.length)return c;c=x(f);return a};a.target=function(f){if(!arguments.length)return g;
return a};d3.svg.mouse=function(a){var b=(a.ownerSVGElement||a).createSVGPoint();if(ba<0&&(window.scrollX||window.scrollY)){var c=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",0).style("left",0),g=c[0][0].getScreenCTM();ba=!(g.f||g.e);c.remove()}if(ba){b.x=d3.event.pageX;b.y=d3.event.pageY}else{b.x=d3.event.clientX;b.y=d3.event.clientY}b=b.matrixTransform(a.getScreenCTM().inverse());return[b.x,b.y]};var ba=/WebKit/.test(navigator.userAgent)?-1:0})(); g=x(f);return a};a.startAngle=function(f){if(!arguments.length)return d;d=x(f);return a};a.endAngle=function(f){if(!arguments.length)return i;i=x(f);return a};return a};d3.svg.mouse=function(a){var b=(a.ownerSVGElement||a).createSVGPoint();if(ba<0&&(window.scrollX||window.scrollY)){var c=d3.select(document.body).append("svg:svg").style("position","absolute").style("top",0).style("left",0),g=c[0][0].getScreenCTM();ba=!(g.f||g.e);c.remove()}if(ba){b.x=d3.event.pageX;b.y=d3.event.pageY}else{b.x=d3.event.clientX;
b.y=d3.event.clientY}b=b.matrixTransform(a.getScreenCTM().inverse());return[b.x,b.y]};var ba=/WebKit/.test(navigator.userAgent)?-1:0})();

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

@ -114,6 +114,8 @@ d3.json("flowers.json", function(flower) {
.append("svg:rect") .append("svg:rect")
.attr("fill", "#999") .attr("fill", "#999")
.attr("fill-opacity", .5); .attr("fill-opacity", .5);
d3.event.preventDefault();
} }
function mousemove() { function mousemove() {
@ -134,26 +136,21 @@ d3.json("flowers.json", function(flower) {
.attr("width", maxx - minx + 1) .attr("width", maxx - minx + 1)
.attr("height", maxy - miny + 1); .attr("height", maxy - miny + 1);
var d = rect.node().__data__, var v = rect.node().__data__,
x = position[d.x], x = position[v.x],
y = position[d.y], y = position[v.y],
mins = x.invert(minx), mins = x.invert(minx),
maxs = x.invert(maxx), maxs = x.invert(maxx),
mint = y.invert(size - maxy), mint = y.invert(size - maxy),
maxt = y.invert(size - miny); maxt = y.invert(size - miny);
count = 0; count = 0;
flower.values.forEach(function(v) {
count += v.on
= mins <= v[d.x]
&& maxs >= v[d.x]
&& mint <= v[d.y]
&& maxt >= v[d.y];
});
svg.selectAll("circle") svg.selectAll("circle")
.attr("fill", function(d) { .attr("fill", function(d) {
return d.y.on ? color(d.y.species) : "#ccc"; return mins <= d.y[v.x] && maxs >= d.y[v.x]
&& mint <= d.y[v.y] && maxt >= d.y[v.y]
? (count++, color(d.y.species))
: "#ccc";
}); });
} }

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

@ -37,17 +37,16 @@ var vis = d3.select("body")
.attr("width", w) .attr("width", w)
.attr("height", h); .attr("height", h);
vis.selectAll("path.area") vis.selectAll("path")
.data(data0) .data(data0)
.enter().append("svg:path") .enter().append("svg:path")
.attr("class", "area")
.attr("fill", function() { return color(Math.random()); }) .attr("fill", function() { return color(Math.random()); })
.attr("d", area); .attr("d", area);
window.addEventListener("keypress", transition, false); window.addEventListener("keypress", transition, false);
function transition() { function transition() {
d3.selectAll("path.area") d3.selectAll("path")
.data(function() { .data(function() {
var d = data1; var d = data1;
data1 = data0; data1 = data0;

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

@ -0,0 +1,114 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Zoom + Pan</title>
<script type="text/javascript" src="../../d3.js"></script>
<script type="text/javascript" src="../../d3.behavior.js"></script>
<style type="text/css">
svg {
font: 10px sans-serif;
shape-rendering: crispEdges;
}
</style>
</head>
<body>
<script type="text/javascript">
var size = [710, 500], // width height
padding = [4, 4, 20, 40], // top right bottom left
tx = function(d) { return "translate(" + x(d) + ",0)"; },
ty = function(d) { return "translate(0," + y(d) + ")"; },
stroke = function(d) { return d ? "#ccc" : "#666"; };
// x-scale (1.42 = 710/500)
var x = d3.scale.linear()
.domain([-1.42, +1.42])
.range([0, size[0]]);
// y-scale (inverted domain)
var y = d3.scale.linear()
.domain([+1.00, -1.00])
.range([0, size[1]]);
var svg = d3.select("body")
.append("svg:svg")
.attr("width", size[0] + padding[3] + padding[1])
.attr("height", size[1] + padding[0] + padding[2])
.attr("pointer-events", "all")
.call(d3.behavior.zoom()
.on("zoom", redraw))
.append("svg:g")
.attr("transform", "translate(" + padding[3] + "," + padding[0] + ")");
svg.append("svg:rect")
.attr("width", size[0])
.attr("height", size[1])
.attr("stroke", stroke)
.attr("fill", "none");
redraw();
function redraw() {
if (d3.event) d3.event.transform(x, y);
var fx = x.tickFormat(10),
fy = y.tickFormat(10);
// Regenerate x-ticks…
var gx = svg.selectAll("g.x")
.data(x.ticks(10), String)
.attr("transform", tx);
gx.select("text")
.text(fx);
var gxe = gx.enter().insert("svg:g", "rect")
.attr("class", "x")
.attr("transform", tx);
gxe.append("svg:line")
.attr("stroke", stroke)
.attr("y1", 0)
.attr("y2", size[1]);
gxe.append("svg:text")
.attr("y", size[1])
.attr("dy", "1em")
.attr("text-anchor", "middle")
.text(fx);
gx.exit().remove();
// Regenerate y-ticks…
var gy = svg.selectAll("g.y")
.data(y.ticks(10), String)
.attr("transform", ty);
gy.select("text")
.text(fy);
var gye = gy.enter().insert("svg:g", "rect")
.attr("class", "y")
.attr("transform", ty);
gye.append("svg:line")
.attr("stroke", stroke)
.attr("x1", 0)
.attr("x2", size[0]);
gye.append("svg:text")
.attr("x", -3)
.attr("dy", ".35em")
.attr("text-anchor", "end")
.text(fy);
gy.exit().remove();
}
</script>
</body>
</html>

1
src/behavior/behavior.js Normal file
Просмотреть файл

@ -0,0 +1 @@
d3.behavior = {};

130
src/behavior/zoom.js Normal file
Просмотреть файл

@ -0,0 +1,130 @@
// TODO unbind zoom behavior?
// TODO unbind listener?
d3.behavior.zoom = function() {
// https://bugs.webkit.org/show_bug.cgi?id=40441
var bug40441 = /WebKit\/533/.test(navigator.userAgent) ? -1 : 0,
bug40441Last = 0,
x = 0,
y = 0,
z = 0,
listeners = [],
pan,
zoom;
function zoom() {
var container = this
.on("mousedown", mousedown)
.on("mousewheel", mousewheel)
.on("DOMMouseScroll", mousewheel)
.on("dblclick", mousewheel);
d3.select(window)
.on("mousemove", mousemove)
.on("mouseup", mouseup);
}
function mousedown(d, i) {
pan = {
x0: x - d3.event.clientX,
y0: y - d3.event.clientY,
target: this,
data: d,
index: i
};
d3.event.preventDefault();
window.focus(); // TODO focusableParent
}
function mousemove() {
zoom = null;
if (pan) {
x = d3.event.clientX + pan.x0;
y = d3.event.clientY + pan.y0;
dispatch.call(pan.target, pan.data, pan.index);
}
}
function mouseup() {
if (pan) {
mousemove();
pan = null;
}
}
function mousewheel(d, i) {
var e = d3.event;
// initialize the mouse location for zooming (to avoid drift)
if (!zoom) {
var p = d3.svg.mouse(this.nearestViewportElement || this);
zoom = {
x0: x,
y0: y,
z0: z,
x1: x - p[0],
y1: y - p[1]
};
}
// adjust zoom level
if (e.type == "dblclick") {
z = e.shiftKey ? Math.ceil(z - 1) : Math.floor(z + 1);
} else {
var delta = (e.wheelDelta / 120 || -e.detail) * .1;
/* Detect fast & large wheel events on WebKit. */
if (bug40441 < 0) {
var now = Date.now(), since = now - bug40441Last;
if ((since > 9) && (Math.abs(e.wheelDelta) / since >= 50)) bug40441 = 1;
bug40441Last = now;
}
if (bug40441 == 1) delta *= .03;
z += delta;
}
// adjust x and y to center around mouse location
var k = Math.pow(2, z - zoom.z0) - 1;
x = zoom.x0 + zoom.x1 * k;
y = zoom.y0 + zoom.y1 * k;
// dispatch redraw
dispatch.call(this, d, i);
}
function dispatch(d, i) {
var o = d3.event, // Events can be reentrant (e.g., focus).
k = Math.pow(2, z);
d3.event = {
scale: k,
translate: [x, y],
transform: function(sx, sy) {
if (sx) transform(sx, x);
if (sy) transform(sy, y);
}
};
function transform(scale, o) {
var domain = scale.__domain || (scale.__domain = scale.domain());
range = scale.range().map(function(v) { return (v - o) / k; });
scale.domain(domain).domain(range.map(scale.invert));
}
try {
for (var j = 0, m = listeners.length; j < m; j++) {
listeners[j].call(this, d, i);
}
} finally {
d3.event = o;
}
}
zoom.on = function(type, listener) {
if (type == "zoom") listeners.push(listener);
return zoom;
};
return zoom;
};

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

@ -1 +1 @@
d3 = {version: "0.30.3"}; // semver d3 = {version: "0.30.4"}; // semver

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

@ -1,7 +1,8 @@
// TODO align, sign, type // TODO align, type
d3.format = function(specifier) { d3.format = function(specifier) {
var match = d3_format_re.exec(specifier), var match = d3_format_re.exec(specifier),
fill = match[1] || " ", fill = match[1] || " ",
sign = d3_format_signs[match[3]] || d3_format_signs["-"],
zfill = match[5], zfill = match[5],
width = +match[6], width = +match[6],
comma = match[7], comma = match[7],
@ -11,9 +12,11 @@ d3.format = function(specifier) {
if (zfill) fill = "0"; // TODO align = "="; if (zfill) fill = "0"; // TODO align = "=";
if (type == "d") precision = "0"; if (type == "d") precision = "0";
return function(value) { return function(value) {
if ((type == "d") && (value % 1)) return ""; var number = +value,
if (precision) value = (+value).toFixed(precision); negative = (number < 0) && (number = -number);
else value += ""; if ((type == "d") && (number % 1)) return "";
if (precision) value = number.toFixed(precision);
else value = "" + number;
if (comma) { if (comma) {
var i = value.lastIndexOf("."), var i = value.lastIndexOf("."),
f = i >= 0 ? value.substring(i) : (i = value.length, ""), f = i >= 0 ? value.substring(i) : (i = value.length, ""),
@ -21,11 +24,17 @@ d3.format = function(specifier) {
while (i > 0) t.push(value.substring(i -= 3, i + 3)); while (i > 0) t.push(value.substring(i -= 3, i + 3));
value = t.reverse().join(",") + f; value = t.reverse().join(",") + f;
} }
var n = value.length; var length = (value = sign(negative, value)).length;
if (n < width) value = new Array(width - n + 1).join(fill) + value; if (length < width) value = new Array(width - length + 1).join(fill) + value;
return value; return value;
}; };
}; };
// [[fill]align][sign][#][0][width][,][.precision][type] // [[fill]align][sign][#][0][width][,][.precision][type]
var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/; var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/;
var d3_format_signs = {
"+": function(negative, value) { return (negative ? "\u2212" : "+") + value; },
" ": function(negative, value) { return (negative ? "\u2212" : " ") + value; },
"-": function(negative, value) { return negative ? "\u2212" + value : value; }
};

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

@ -5,11 +5,11 @@ d3.scale.pow = function() {
b = 1 / p; b = 1 / p;
function powp(x) { function powp(x) {
return Math.pow(x, p); return x < 0 ? -Math.pow(-x, p) : Math.pow(x, p);
} }
function powb(x) { function powb(x) {
return Math.pow(x, b); return x < 0 ? -Math.pow(-x, b) : Math.pow(x, b);
} }
function scale(x) { function scale(x) {