vega-statistics
Advanced tools
Comparing version 1.7.9 to 1.7.10
@@ -1188,4 +1188,4 @@ (function (global, factory) { | ||
// subdivide up to accuracy of 0.1 degrees | ||
const MIN_RADIANS = 0.1 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent | ||
// subdivide up to accuracy of 0.5 degrees | ||
const MIN_RADIANS = 0.5 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent | ||
@@ -1222,4 +1222,6 @@ function sampleCurve (f, extent, minSteps, maxSteps) { | ||
let p0 = prev[0], | ||
p1 = next[next.length - 1]; | ||
let p0 = prev[0]; | ||
let p1 = next[next.length - 1]; | ||
const sx = 1 / span; | ||
const sy = scaleY(p0[1], next); | ||
@@ -1229,6 +1231,7 @@ while (p1) { | ||
const pm = point((p0[0] + p1[0]) / 2); | ||
const dx = pm[0] - p0[0] >= stop; | ||
if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) { | ||
if (dx && angleDelta(p0, pm, p1, sx, sy) > MIN_RADIANS) { | ||
// maximum resolution has not yet been met, and | ||
// subdivision midpoint sufficiently different from endpoint | ||
// subdivision midpoint is sufficiently different from endpoint | ||
// save subdivision, push midpoint onto the visitation stack | ||
@@ -1250,5 +1253,19 @@ next.push(pm); | ||
function angleDelta(p, q, r) { | ||
const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]), | ||
a1 = Math.atan2(q[1] - p[1], q[0] - p[0]); | ||
function scaleY(init, points) { | ||
let ymin = init; | ||
let ymax = init; | ||
const n = points.length; | ||
for (let i = 0; i < n; ++i) { | ||
const y = points[i][1]; | ||
if (y < ymin) ymin = y; | ||
if (y > ymax) ymax = y; | ||
} | ||
return 1 / (ymax - ymin); | ||
} | ||
function angleDelta(p, q, r, sx, sy) { | ||
const a0 = Math.atan2(sy * (r[1] - p[1]), sx * (r[0] - p[0])), | ||
a1 = Math.atan2(sy * (q[1] - p[1]), sx * (q[0] - p[0])); | ||
return Math.abs(a0 - a1); | ||
@@ -1255,0 +1272,0 @@ } |
@@ -1,2 +0,2 @@ | ||
var vega=function(t){"use strict";function*n(t,n){if(null==n)for(let n of t)null!=n&&""!==n&&(n=+n)>=n&&(yield n);else{let r=-1;for(let e of t)e=n(e,++r,t),null!=e&&""!==e&&(e=+e)>=e&&(yield e)}}function r(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function e(t){return null===t?NaN:+t}function o(t,n){let r;if(void 0===n)for(const n of t)null!=n&&(r<n||void 0===r&&n>=n)&&(r=n);else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(r<o||void 0===r&&o>=o)&&(r=o)}return r}function l(t,n){let r;if(void 0===n)for(const n of t)null!=n&&(r>n||void 0===r&&n>=n)&&(r=n);else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(r>o||void 0===r&&o>=o)&&(r=o)}return r}function u(t,n,e=0,o=t.length-1,l=r){for(;o>e;){if(o-e>600){const r=o-e+1,f=n-e+1,a=Math.log(r),i=.5*Math.exp(2*a/3),s=.5*Math.sqrt(a*i*(r-i)/r)*(f-r/2<0?-1:1);u(t,n,Math.max(e,Math.floor(n-f*i/r+s)),Math.min(o,Math.floor(n+(r-f)*i/r+s)),l)}const r=t[n];let a=e,i=o;for(f(t,e,n),l(t[o],r)>0&&f(t,e,o);a<i;){for(f(t,a,i),++a,--i;l(t[a],r)<0;)++a;for(;l(t[i],r)>0;)--i}0===l(t[e],r)?f(t,e,i):(++i,f(t,i,o)),i<=n&&(e=i+1),n<=i&&(o=i-1)}return t}function f(t,n,r){const e=t[n];t[n]=t[r],t[r]=e}function a(t,n,r){if(e=(t=Float64Array.from(function*(t,n){if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(yield n);else{let r=-1;for(let e of t)null!=(e=n(e,++r,t))&&(e=+e)>=e&&(yield e)}}(t,r))).length){if((n=+n)<=0||e<2)return l(t);if(n>=1)return o(t);var e,f=(e-1)*n,a=Math.floor(f),i=o(u(t,a).subarray(0,a+1));return i+(l(t.subarray(a+1))-i)*(f-a)}}function i(t,o,l){const u=Float64Array.from(n(t,l));return u.sort(r),o.map(t=>function(t,n,r=e){if(o=t.length){if((n=+n)<=0||o<2)return+r(t[0],0,t);if(n>=1)return+r(t[o-1],o-1,t);var o,l=(o-1)*n,u=Math.floor(l),f=+r(t[u],u,t);return f+(+r(t[u+1],u+1,t)-f)*(l-u)}}(u,t))}function s(t,n){return i(t,[.25,.5,.75],n)}function c(t,n){const r=t.length,e=function(t,n){const r=function(t,n){let r,e=0,o=0,l=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(r=n-o,o+=r/++e,l+=r*(n-o));else{let u=-1;for(let f of t)null!=(f=n(f,++u,t))&&(f=+f)>=f&&(r=f-o,o+=r/++e,l+=r*(f-o))}if(e>1)return l/(e-1)}(t,n);return r?Math.sqrt(r):r}(t,n),o=s(t,n),l=(o[2]-o[0])/1.34;return 1.06*(Math.min(e,l)||e||Math.abs(o[0])||1)*Math.pow(r,-.2)}t.random=Math.random;const h=Math.sqrt(2*Math.PI),d=Math.SQRT2;let M=NaN;function m(n,r){n=n||0,r=null==r?1:r;let e,o,l=0,u=0;if(M==M)l=M,M=NaN;else{do{l=2*t.random()-1,u=2*t.random()-1,e=l*l+u*u}while(0===e||e>1);o=Math.sqrt(-2*Math.log(e)/e),l*=o,M=u*o}return n+l*r}function p(t,n,r){const e=(t-(n||0))/(r=null==r?1:r);return Math.exp(-.5*e*e)/(r*h)}function g(t,n,r){const e=(t-(n=n||0))/(r=null==r?1:r),o=Math.abs(e);let l;if(o>37)l=0;else{const t=Math.exp(-o*o/2);let n;o<7.07106781186547?(n=.0352624965998911*o+.700383064443688,n=n*o+6.37396220353165,n=n*o+33.912866078383,n=n*o+112.079291497871,n=n*o+221.213596169931,n=n*o+220.206867912376,l=t*n,n=.0883883476483184*o+1.75566716318264,n=n*o+16.064177579207,n=n*o+86.7807322029461,n=n*o+296.564248779674,n=n*o+637.333633378831,n=n*o+793.826512519948,n=n*o+440.413735824752,l/=n):(n=o+.65,n=o+4/n,n=o+3/n,n=o+2/n,n=o+1/n,l=t/n/2.506628274631)}return e>0?1-l:l}function b(t,n,r){return t<0||t>1?NaN:(n||0)+(null==r?1:r)*d*function(t){let n,r=-Math.log((1-t)*(1+t));r<6.25?(r-=3.125,n=-364441206401782e-35,n=n*r-16850591381820166e-35,n=128584807152564e-32+n*r,n=11157877678025181e-33+n*r,n=n*r-1333171662854621e-31,n=20972767875968562e-33+n*r,n=6637638134358324e-30+n*r,n=n*r-4054566272975207e-29,n=n*r-8151934197605472e-29,n=26335093153082323e-28+n*r,n=n*r-12975133253453532e-27,n=n*r-5415412054294628e-26,n=1.0512122733215323e-9+n*r,n=n*r-4.112633980346984e-9,n=n*r-2.9070369957882005e-8,n=4.2347877827932404e-7+n*r,n=n*r-13654692000834679e-22,n=n*r-13882523362786469e-21,n=.00018673420803405714+n*r,n=n*r-.000740702534166267,n=n*r-.006033670871430149,n=.24015818242558962+n*r,n=1.6536545626831027+n*r):r<16?(r=Math.sqrt(r)-3.25,n=2.2137376921775787e-9,n=9.075656193888539e-8+n*r,n=n*r-2.7517406297064545e-7,n=1.8239629214389228e-8+n*r,n=15027403968909828e-22+n*r,n=n*r-4013867526981546e-21,n=29234449089955446e-22+n*r,n=12475304481671779e-21+n*r,n=n*r-47318229009055734e-21,n=6828485145957318e-20+n*r,n=24031110387097894e-21+n*r,n=n*r-.0003550375203628475,n=.0009532893797373805+n*r,n=n*r-.0016882755560235047,n=.002491442096107851+n*r,n=n*r-.003751208507569241,n=.005370914553590064+n*r,n=1.0052589676941592+n*r,n=3.0838856104922208+n*r):Number.isFinite(r)?(r=Math.sqrt(r)-5,n=-27109920616438573e-27,n=n*r-2.555641816996525e-10,n=1.5076572693500548e-9+n*r,n=n*r-3.789465440126737e-9,n=7.61570120807834e-9+n*r,n=n*r-1.496002662714924e-8,n=2.914795345090108e-8+n*r,n=n*r-6.771199775845234e-8,n=2.2900482228026655e-7+n*r,n=n*r-9.9298272942317e-7,n=4526062597223154e-21+n*r,n=n*r-1968177810553167e-20,n=7599527703001776e-20+n*r,n=n*r-.00021503011930044477,n=n*r-.00013871931833623122,n=1.0103004648645344+n*r,n=4.849906401408584+n*r):n=1/0;return n*t}(2*t-1)}function N(t,n){let r,e;const o={mean(t){return arguments.length?(r=t||0,o):r},stdev(t){return arguments.length?(e=null==t?1:t,o):e},sample:()=>m(r,e),pdf:t=>p(t,r,e),cdf:t=>g(t,r,e),icdf:t=>b(t,r,e)};return o.mean(t).stdev(n)}function v(t,n){return t=t||0,n=null==n?1:n,Math.exp(t+m()*n)}function w(t,n,r){if(t<=0)return 0;n=n||0,r=null==r?1:r;const e=(Math.log(t)-n)/r;return Math.exp(-.5*e*e)/(r*h*t)}function x(t,n,r){return g(Math.log(t),n,r)}function y(t,n,r){return Math.exp(b(t,n,r))}function q(n,r){return null==r&&(r=null==n?1:n,n=0),n+(r-n)*t.random()}function A(t,n,r){return null==r&&(r=null==n?1:n,n=0),t>=n&&t<=r?1/(r-n):0}function F(t,n,r){return null==r&&(r=null==n?1:n,n=0),t<n?0:t>r?1:(t-n)/(r-n)}function L(t,n,r){return null==r&&(r=null==n?1:n,n=0),t>=0&&t<=1?n+t*(r-n):NaN}function S(t,n,r,e){const o=e-t*t,l=Math.abs(o)<1e-24?0:(r-t*n)/o;return[n-l*t,l]}function E(t,n,r,e){t=t.filter(t=>{let e=n(t),o=r(t);return null!=e&&(e=+e)>=e&&null!=o&&(o=+o)>=o}),e&&t.sort((t,r)=>n(t)-n(r));const o=t.length,l=new Float64Array(o),u=new Float64Array(o);let f,a,i,s=0,c=0,h=0;for(i of t)l[s]=f=+n(i),u[s]=a=+r(i),++s,c+=(f-c)/s,h+=(a-h)/s;for(s=0;s<o;++s)l[s]-=c,u[s]-=h;return[l,u,c,h]}function U(t,n,r,e){let o,l,u=-1;for(const f of t)o=n(f),l=r(f),null!=o&&(o=+o)>=o&&null!=l&&(l=+l)>=l&&e(o,l,++u)}function I(t,n,r,e,o){let l=0,u=0;return U(t,n,r,(t,n)=>{const r=n-o(t),f=n-e;l+=r*r,u+=f*f}),1-l/u}function P(t,n,r){let e=0,o=0,l=0,u=0,f=0;U(t,n,r,(t,n)=>{++f,e+=(t-e)/f,o+=(n-o)/f,l+=(t*n-l)/f,u+=(t*t-u)/f});const a=S(e,o,l,u),i=t=>a[0]+a[1]*t;return{coef:a,predict:i,rSquared:I(t,n,r,o,i)}}function k(t,n,r){const[e,o,l,u]=E(t,n,r),f=e.length;let a,i,s,c,h=0,d=0,M=0,m=0,p=0;for(a=0;a<f;)i=e[a],s=o[a++],c=i*i,h+=(c-h)/a,d+=(c*i-d)/a,M+=(c*c-M)/a,m+=(i*s-m)/a,p+=(c*s-p)/a;const g=M-h*h,b=h*g-d*d,N=(p*h-m*d)/b,v=(m*g-p*d)/b,w=-N*h,x=t=>N*(t-=l)*t+v*t+w+u;return{coef:[w-v*l+N*l*l+u,v-2*N*l,N],predict:x,rSquared:I(t,n,r,u,x)}}function C(t,n,r,e){const o=Array(t);let l,u,f,a;for(l=0;l<t;++l)o[l]=0;for(l=t-1;l>=0;--l)for(f=n[l],a=1,o[l]+=f,u=1;u<=l;++u)a*=(l+1-u)/u,o[l-u]+=f*Math.pow(r,u)*a;return o[0]+=e,o}function D(t){return(t=1-t*t*t)*t*t}function R(t,n,r){const e=t[n];let o=r[0],l=r[1]+1;if(!(l>=t.length))for(;n>o&&t[l]-e<=e-t[o];)r[0]=++o,r[1]=l,++l}const K=.1*Math.PI/180;function Q(t,n,r){const e=Math.atan2(r[1]-t[1],r[0]-t[0]),o=Math.atan2(n[1]-t[1],n[0]-t[0]);return Math.abs(e-o)}return t.bandwidthNRD=c,t.bin=function(t){const n=t.maxbins||20,r=t.base||10,e=Math.log(r),o=t.divide||[5,2];let l,u,f,a,i,s,c=t.extent[0],h=t.extent[1];const d=t.span||h-c||Math.abs(c)||1;if(t.step)l=t.step;else if(t.steps){for(a=d/n,i=0,s=t.steps.length;i<s&&t.steps[i]<a;++i);l=t.steps[Math.max(0,i-1)]}else{for(u=Math.ceil(Math.log(n)/e),f=t.minstep||0,l=Math.max(f,Math.pow(r,Math.round(Math.log(d)/e)-u));Math.ceil(d/l)>n;)l*=r;for(i=0,s=o.length;i<s;++i)a=l/o[i],a>=f&&d/a<=n&&(l=a)}a=Math.log(l);const M=a>=0?0:1+~~(-a/e),m=Math.pow(r,-M-1);return(t.nice||void 0===t.nice)&&(a=Math.floor(c/l+m)*l,c=c<a?a-l:a,h=Math.ceil(h/l)*l),{start:c,stop:h===c?c+l:h,step:l}},t.bootstrapCI=function(e,o,l,u){if(!e.length)return[void 0,void 0];const f=Float64Array.from(n(e,u)),i=f.length,s=o;let c,h,d,M;for(d=0,M=Array(s);d<s;++d){for(c=0,h=0;h<i;++h)c+=f[~~(t.random()*i)];M[d]=c/i}return M.sort(r),[a(M,l/2),a(M,1-l/2)]},t.cumulativeLogNormal=x,t.cumulativeNormal=g,t.cumulativeUniform=F,t.densityLogNormal=w,t.densityNormal=p,t.densityUniform=A,t.dotbin=function(t,n,r,e){e=e||(t=>t);const o=t.length,l=new Float64Array(o);let u,f=0,a=1,i=e(t[0]),s=i,c=i+n;for(;a<o;++a){if(u=e(t[a]),u>=c){for(s=(i+s)/2;f<a;++f)l[f]=s;c=u+n,i=u}s=u}for(s=(i+s)/2;f<a;++f)l[f]=s;return r?function(t,n){const r=t.length;let e,o,l=0,u=1;for(;t[l]===t[u];)++u;for(;u<r;){for(e=u+1;t[u]===t[e];)++e;if(t[u]-t[u-1]<n){for(o=u+(l+e-u-u>>1);o<u;)t[o++]=t[u];for(;o>u;)t[o--]=t[l]}l=u,u=e}return t}(l,n+n/4):l},t.quantileLogNormal=y,t.quantileNormal=b,t.quantileUniform=L,t.quantiles=i,t.quartiles=s,t.randomInteger=function(n,r){let e,o,l;null==r&&(r=n,n=0);const u={min(t){return arguments.length?(e=t||0,l=o-e,u):e},max(t){return arguments.length?(o=t||0,l=o-e,u):o},sample:()=>e+Math.floor(l*t.random()),pdf:t=>t===Math.floor(t)&&t>=e&&t<o?1/l:0,cdf(t){const n=Math.floor(t);return n<e?0:n>=o?1:(n-e+1)/l},icdf:t=>t>=0&&t<=1?e-1+Math.floor(t*l):NaN};return u.min(n).max(r)},t.randomKDE=function(n,r){const e=N();let o=0;const l={data(t){return arguments.length?(n=t,o=t?t.length:0,l.bandwidth(r)):n},bandwidth(t){return arguments.length?(!(r=t)&&n&&(r=c(n)),l):r},sample:()=>n[~~(t.random()*o)]+r*e.sample(),pdf(t){let l=0,u=0;for(;u<o;++u)l+=e.pdf((t-n[u])/r);return l/r/o},cdf(t){let l=0,u=0;for(;u<o;++u)l+=e.cdf((t-n[u])/r);return l/o},icdf(){throw Error("KDE icdf not supported.")}};return l.data(n)},t.randomLCG=function(t){return function(){return(t=(1103515245*t+12345)%2147483647)/2147483647}},t.randomLogNormal=function(t,n){let r,e;const o={mean(t){return arguments.length?(r=t||0,o):r},stdev(t){return arguments.length?(e=null==t?1:t,o):e},sample:()=>v(r,e),pdf:t=>w(t,r,e),cdf:t=>x(t,r,e),icdf:t=>y(t,r,e)};return o.mean(t).stdev(n)},t.randomMixture=function(n,r){let e,o=0;const l={weights(t){return arguments.length?(e=function(t){const n=[];let r,e=0;for(r=0;r<o;++r)e+=n[r]=null==t[r]?1:+t[r];for(r=0;r<o;++r)n[r]/=e;return n}(r=t||[]),l):r},distributions(t){return arguments.length?(t?(o=t.length,n=t):(o=0,n=[]),l.weights(r)):n},sample(){const r=t.random();let l=n[o-1],u=e[0],f=0;for(;f<o-1;u+=e[++f])if(r<u){l=n[f];break}return l.sample()},pdf(t){let r=0,l=0;for(;l<o;++l)r+=e[l]*n[l].pdf(t);return r},cdf(t){let r=0,l=0;for(;l<o;++l)r+=e[l]*n[l].cdf(t);return r},icdf(){throw Error("Mixture icdf not supported.")}};return l.distributions(n).weights(r)},t.randomNormal=N,t.randomUniform=function(t,n){let r,e;const o={min(t){return arguments.length?(r=t||0,o):r},max(t){return arguments.length?(e=null==t?1:t,o):e},sample:()=>q(r,e),pdf:t=>A(t,r,e),cdf:t=>F(t,r,e),icdf:t=>L(t,r,e)};return null==n&&(n=null==t?1:t,t=0),o.min(t).max(n)},t.regressionExp=function(t,n,r){const[e,o,l,u]=E(t,n,r);let f,a,i,s=0,c=0,h=0,d=0,M=0;U(t,n,r,(t,n)=>{f=e[M++],a=Math.log(n),i=f*n,s+=(n*a-s)/M,c+=(i-c)/M,h+=(i*a-h)/M,d+=(f*i-d)/M});const[m,p]=S(c/u,s/u,h/u,d/u),g=t=>Math.exp(m+p*(t-l));return{coef:[Math.exp(m-p*l),p],predict:g,rSquared:I(t,n,r,u,g)}},t.regressionLinear=P,t.regressionLoess=function(t,n,r,e){const[o,l,u,f]=E(t,n,r,!0),i=o.length,s=Math.max(2,~~(e*i)),c=new Float64Array(i),h=new Float64Array(i),d=new Float64Array(i).fill(1);for(let t=-1;++t<=2;){const n=[0,s-1];for(let t=0;t<i;++t){const r=o[t],e=n[0],u=n[1],f=r-o[e]>o[u]-r?e:u;let a=0,i=0,s=0,M=0,m=0;const p=1/Math.abs(o[f]-r||1);for(let t=e;t<=u;++t){const n=o[t],e=l[t],u=D(Math.abs(r-n)*p)*d[t],f=n*u;a+=u,i+=f,s+=e*u,M+=e*f,m+=n*f}const[g,b]=S(i/a,s/a,M/a,m/a);c[t]=g+b*r,h[t]=Math.abs(l[t]-c[t]),R(o,t+1,n)}if(2===t)break;const r=a(h,.5,void 0);if(Math.abs(r)<1e-12)break;for(let t,n,e=0;e<i;++e)t=h[e]/(6*r),d[e]=t>=1?1e-12:(n=1-t*t)*n}return function(t,n,r,e){const o=t.length,l=[];let u,f=0,a=0,i=[];for(;f<o;++f)u=t[f]+r,i[0]===u?i[1]+=(n[f]-i[1])/++a:(a=0,i[1]+=e,i=[u,n[f]],l.push(i));return i[1]+=e,l}(o,c,u,f)},t.regressionLog=function(t,n,r){let e=0,o=0,l=0,u=0,f=0;U(t,n,r,(t,n)=>{++f,t=Math.log(t),e+=(t-e)/f,o+=(n-o)/f,l+=(t*n-l)/f,u+=(t*t-u)/f});const a=S(e,o,l,u),i=t=>a[0]+a[1]*Math.log(t);return{coef:a,predict:i,rSquared:I(t,n,r,o,i)}},t.regressionPoly=function(t,n,r,e){if(1===e)return P(t,n,r);if(2===e)return k(t,n,r);const[o,l,u,f]=E(t,n,r),a=o.length,i=[],s=[],c=e+1;let h,d,M,m,p;for(h=0;h<c;++h){for(M=0,m=0;M<a;++M)m+=Math.pow(o[M],h)*l[M];for(i.push(m),p=new Float64Array(c),d=0;d<c;++d){for(M=0,m=0;M<a;++M)m+=Math.pow(o[M],h+d);p[d]=m}s.push(p)}s.push(i);const g=function(t){const n=t.length-1,r=[];let e,o,l,u,f;for(e=0;e<n;++e){for(u=e,o=e+1;o<n;++o)Math.abs(t[e][o])>Math.abs(t[e][u])&&(u=o);for(l=e;l<n+1;++l)f=t[l][e],t[l][e]=t[l][u],t[l][u]=f;for(o=e+1;o<n;++o)for(l=n;l>=e;l--)t[l][o]-=t[l][e]*t[e][o]/t[e][e]}for(o=n-1;o>=0;--o){for(f=0,l=o+1;l<n;++l)f+=t[l][o]*r[l];r[o]=(t[n][o]-f)/t[o][o]}return r}(s),b=t=>{t-=u;let n=f+g[0]+g[1]*t+g[2]*t*t;for(h=3;h<c;++h)n+=g[h]*Math.pow(t,h);return n};return{coef:C(c,g,-u,f),predict:b,rSquared:I(t,n,r,f,b)}},t.regressionPow=function(t,n,r){let e=0,o=0,l=0,u=0,f=0,a=0;U(t,n,r,(t,n)=>{const r=Math.log(t),i=Math.log(n);++a,e+=(r-e)/a,o+=(i-o)/a,l+=(r*i-l)/a,u+=(r*r-u)/a,f+=(n-f)/a});const i=S(e,o,l,u),s=t=>i[0]*Math.pow(t,i[1]);return i[0]=Math.exp(i[0]),{coef:i,predict:s,rSquared:I(t,n,r,f,s)}},t.regressionQuad=k,t.sampleCurve=function(t,n,r,e){r=r||25,e=Math.max(r,e||200);const o=n=>[n,t(n)],l=n[0],u=n[1],f=u-l,a=f/e,i=[o(l)],s=[];if(r===e){for(let t=1;t<e;++t)i.push(o(l+t/r*f));return i.push(o(u)),i}s.push(o(u));for(let t=r;--t>0;)s.push(o(l+t/r*f));let c=i[0],h=s[s.length-1];for(;h;){const t=o((c[0]+h[0])/2);t[0]-c[0]>=a&&Q(c,t,h)>K?s.push(t):(c=h,i.push(h),s.pop()),h=s[s.length-1]}return i},t.sampleLogNormal=v,t.sampleNormal=m,t.sampleUniform=q,t.setRandom=function(n){t.random=n},t}({}); | ||
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).vega={})}(this,(function(t){"use strict";function*n(t,n){if(null==n)for(let n of t)null!=n&&""!==n&&(n=+n)>=n&&(yield n);else{let e=-1;for(let r of t)r=n(r,++e,t),null!=r&&""!==r&&(r=+r)>=r&&(yield r)}}function e(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function r(t){return null===t?NaN:+t}function o(t,n){let e;if(void 0===n)for(const n of t)null!=n&&(e<n||void 0===e&&n>=n)&&(e=n);else{let r=-1;for(let o of t)null!=(o=n(o,++r,t))&&(e<o||void 0===e&&o>=o)&&(e=o)}return e}function l(t,n){let e;if(void 0===n)for(const n of t)null!=n&&(e>n||void 0===e&&n>=n)&&(e=n);else{let r=-1;for(let o of t)null!=(o=n(o,++r,t))&&(e>o||void 0===e&&o>=o)&&(e=o)}return e}function u(t,n,r=0,o=t.length-1,l=e){for(;o>r;){if(o-r>600){const e=o-r+1,f=n-r+1,a=Math.log(e),i=.5*Math.exp(2*a/3),s=.5*Math.sqrt(a*i*(e-i)/e)*(f-e/2<0?-1:1);u(t,n,Math.max(r,Math.floor(n-f*i/e+s)),Math.min(o,Math.floor(n+(e-f)*i/e+s)),l)}const e=t[n];let a=r,i=o;for(f(t,r,n),l(t[o],e)>0&&f(t,r,o);a<i;){for(f(t,a,i),++a,--i;l(t[a],e)<0;)++a;for(;l(t[i],e)>0;)--i}0===l(t[r],e)?f(t,r,i):(++i,f(t,i,o)),i<=n&&(r=i+1),n<=i&&(o=i-1)}return t}function f(t,n,e){const r=t[n];t[n]=t[e],t[e]=r}function a(t,n,e){if(t=Float64Array.from(function*(t,n){if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(yield n);else{let e=-1;for(let r of t)null!=(r=n(r,++e,t))&&(r=+r)>=r&&(yield r)}}(t,e)),r=t.length){if((n=+n)<=0||r<2)return l(t);if(n>=1)return o(t);var r,f=(r-1)*n,a=Math.floor(f),i=o(u(t,a).subarray(0,a+1));return i+(l(t.subarray(a+1))-i)*(f-a)}}function i(t,o,l){const u=Float64Array.from(n(t,l));return u.sort(e),o.map((t=>function(t,n,e=r){if(o=t.length){if((n=+n)<=0||o<2)return+e(t[0],0,t);if(n>=1)return+e(t[o-1],o-1,t);var o,l=(o-1)*n,u=Math.floor(l),f=+e(t[u],u,t);return f+(+e(t[u+1],u+1,t)-f)*(l-u)}}(u,t)))}function s(t,n){return i(t,[.25,.5,.75],n)}function c(t,n){const e=t.length,r=function(t,n){const e=function(t,n){let e,r=0,o=0,l=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(e=n-o,o+=e/++r,l+=e*(n-o));else{let u=-1;for(let f of t)null!=(f=n(f,++u,t))&&(f=+f)>=f&&(e=f-o,o+=e/++r,l+=e*(f-o))}if(r>1)return l/(r-1)}(t,n);return e?Math.sqrt(e):e}(t,n),o=s(t,n),l=(o[2]-o[0])/1.34;return 1.06*(Math.min(r,l)||r||Math.abs(o[0])||1)*Math.pow(e,-.2)}t.random=Math.random;const h=Math.sqrt(2*Math.PI),d=Math.SQRT2;let p=NaN;function M(n,e){n=n||0,e=null==e?1:e;let r,o,l=0,u=0;if(p==p)l=p,p=NaN;else{do{l=2*t.random()-1,u=2*t.random()-1,r=l*l+u*u}while(0===r||r>1);o=Math.sqrt(-2*Math.log(r)/r),l*=o,p=u*o}return n+l*e}function m(t,n,e){const r=(t-(n||0))/(e=null==e?1:e);return Math.exp(-.5*r*r)/(e*h)}function g(t,n,e){const r=(t-(n=n||0))/(e=null==e?1:e),o=Math.abs(r);let l;if(o>37)l=0;else{const t=Math.exp(-o*o/2);let n;o<7.07106781186547?(n=.0352624965998911*o+.700383064443688,n=n*o+6.37396220353165,n=n*o+33.912866078383,n=n*o+112.079291497871,n=n*o+221.213596169931,n=n*o+220.206867912376,l=t*n,n=.0883883476483184*o+1.75566716318264,n=n*o+16.064177579207,n=n*o+86.7807322029461,n=n*o+296.564248779674,n=n*o+637.333633378831,n=n*o+793.826512519948,n=n*o+440.413735824752,l/=n):(n=o+.65,n=o+4/n,n=o+3/n,n=o+2/n,n=o+1/n,l=t/n/2.506628274631)}return r>0?1-l:l}function b(t,n,e){return t<0||t>1?NaN:(n||0)+(null==e?1:e)*d*function(t){let n,e=-Math.log((1-t)*(1+t));e<6.25?(e-=3.125,n=-364441206401782e-35,n=n*e-16850591381820166e-35,n=128584807152564e-32+n*e,n=11157877678025181e-33+n*e,n=n*e-1333171662854621e-31,n=20972767875968562e-33+n*e,n=6637638134358324e-30+n*e,n=n*e-4054566272975207e-29,n=n*e-8151934197605472e-29,n=26335093153082323e-28+n*e,n=n*e-12975133253453532e-27,n=n*e-5415412054294628e-26,n=1.0512122733215323e-9+n*e,n=n*e-4.112633980346984e-9,n=n*e-2.9070369957882005e-8,n=4.2347877827932404e-7+n*e,n=n*e-13654692000834679e-22,n=n*e-13882523362786469e-21,n=.00018673420803405714+n*e,n=n*e-.000740702534166267,n=n*e-.006033670871430149,n=.24015818242558962+n*e,n=1.6536545626831027+n*e):e<16?(e=Math.sqrt(e)-3.25,n=2.2137376921775787e-9,n=9.075656193888539e-8+n*e,n=n*e-2.7517406297064545e-7,n=1.8239629214389228e-8+n*e,n=15027403968909828e-22+n*e,n=n*e-4013867526981546e-21,n=29234449089955446e-22+n*e,n=12475304481671779e-21+n*e,n=n*e-47318229009055734e-21,n=6828485145957318e-20+n*e,n=24031110387097894e-21+n*e,n=n*e-.0003550375203628475,n=.0009532893797373805+n*e,n=n*e-.0016882755560235047,n=.002491442096107851+n*e,n=n*e-.003751208507569241,n=.005370914553590064+n*e,n=1.0052589676941592+n*e,n=3.0838856104922208+n*e):Number.isFinite(e)?(e=Math.sqrt(e)-5,n=-27109920616438573e-27,n=n*e-2.555641816996525e-10,n=1.5076572693500548e-9+n*e,n=n*e-3.789465440126737e-9,n=7.61570120807834e-9+n*e,n=n*e-1.496002662714924e-8,n=2.914795345090108e-8+n*e,n=n*e-6.771199775845234e-8,n=2.2900482228026655e-7+n*e,n=n*e-9.9298272942317e-7,n=4526062597223154e-21+n*e,n=n*e-1968177810553167e-20,n=7599527703001776e-20+n*e,n=n*e-.00021503011930044477,n=n*e-.00013871931833623122,n=1.0103004648645344+n*e,n=4.849906401408584+n*e):n=1/0;return n*t}(2*t-1)}function x(t,n){let e,r;const o={mean(t){return arguments.length?(e=t||0,o):e},stdev(t){return arguments.length?(r=null==t?1:t,o):r},sample:()=>M(e,r),pdf:t=>m(t,e,r),cdf:t=>g(t,e,r),icdf:t=>b(t,e,r)};return o.mean(t).stdev(n)}function y(t,n){return t=t||0,n=null==n?1:n,Math.exp(t+M()*n)}function N(t,n,e){if(t<=0)return 0;n=n||0,e=null==e?1:e;const r=(Math.log(t)-n)/e;return Math.exp(-.5*r*r)/(e*h*t)}function v(t,n,e){return g(Math.log(t),n,e)}function w(t,n,e){return Math.exp(b(t,n,e))}function q(n,e){return null==e&&(e=null==n?1:n,n=0),n+(e-n)*t.random()}function A(t,n,e){return null==e&&(e=null==n?1:n,n=0),t>=n&&t<=e?1/(e-n):0}function F(t,n,e){return null==e&&(e=null==n?1:n,n=0),t<n?0:t>e?1:(t-n)/(e-n)}function L(t,n,e){return null==e&&(e=null==n?1:n,n=0),t>=0&&t<=1?n+t*(e-n):NaN}function S(t,n,e,r){const o=r-t*t,l=Math.abs(o)<1e-24?0:(e-t*n)/o;return[n-l*t,l]}function E(t,n,e,r){t=t.filter((t=>{let r=n(t),o=e(t);return null!=r&&(r=+r)>=r&&null!=o&&(o=+o)>=o})),r&&t.sort(((t,e)=>n(t)-n(e)));const o=t.length,l=new Float64Array(o),u=new Float64Array(o);let f,a,i,s=0,c=0,h=0;for(i of t)l[s]=f=+n(i),u[s]=a=+e(i),++s,c+=(f-c)/s,h+=(a-h)/s;for(s=0;s<o;++s)l[s]-=c,u[s]-=h;return[l,u,c,h]}function P(t,n,e,r){let o,l,u=-1;for(const f of t)o=n(f),l=e(f),null!=o&&(o=+o)>=o&&null!=l&&(l=+l)>=l&&r(o,l,++u)}function U(t,n,e,r,o){let l=0,u=0;return P(t,n,e,((t,n)=>{const e=n-o(t),f=n-r;l+=e*e,u+=f*f})),1-l/u}function I(t,n,e){let r=0,o=0,l=0,u=0,f=0;P(t,n,e,((t,n)=>{++f,r+=(t-r)/f,o+=(n-o)/f,l+=(t*n-l)/f,u+=(t*t-u)/f}));const a=S(r,o,l,u),i=t=>a[0]+a[1]*t;return{coef:a,predict:i,rSquared:U(t,n,e,o,i)}}function k(t,n,e){const[r,o,l,u]=E(t,n,e),f=r.length;let a,i,s,c,h=0,d=0,p=0,M=0,m=0;for(a=0;a<f;)i=r[a],s=o[a++],c=i*i,h+=(c-h)/a,d+=(c*i-d)/a,p+=(c*c-p)/a,M+=(i*s-M)/a,m+=(c*s-m)/a;const g=p-h*h,b=h*g-d*d,x=(m*h-M*d)/b,y=(M*g-m*d)/b,N=-x*h,v=t=>x*(t-=l)*t+y*t+N+u;return{coef:[N-y*l+x*l*l+u,y-2*x*l,x],predict:v,rSquared:U(t,n,e,u,v)}}function C(t,n,e,r){const o=Array(t);let l,u,f,a;for(l=0;l<t;++l)o[l]=0;for(l=t-1;l>=0;--l)for(f=n[l],a=1,o[l]+=f,u=1;u<=l;++u)a*=(l+1-u)/u,o[l-u]+=f*Math.pow(e,u)*a;return o[0]+=r,o}function D(t){return(t=1-t*t*t)*t*t}function R(t,n,e){const r=t[n];let o=e[0],l=e[1]+1;if(!(l>=t.length))for(;n>o&&t[l]-r<=r-t[o];)e[0]=++o,e[1]=l,++l}const T=.5*Math.PI/180;function j(t,n,e,r,o){const l=Math.atan2(o*(e[1]-t[1]),r*(e[0]-t[0])),u=Math.atan2(o*(n[1]-t[1]),r*(n[0]-t[0]));return Math.abs(l-u)}t.bandwidthNRD=c,t.bin=function(t){const n=t.maxbins||20,e=t.base||10,r=Math.log(e),o=t.divide||[5,2];let l,u,f,a,i,s,c=t.extent[0],h=t.extent[1];const d=t.span||h-c||Math.abs(c)||1;if(t.step)l=t.step;else if(t.steps){for(a=d/n,i=0,s=t.steps.length;i<s&&t.steps[i]<a;++i);l=t.steps[Math.max(0,i-1)]}else{for(u=Math.ceil(Math.log(n)/r),f=t.minstep||0,l=Math.max(f,Math.pow(e,Math.round(Math.log(d)/r)-u));Math.ceil(d/l)>n;)l*=e;for(i=0,s=o.length;i<s;++i)a=l/o[i],a>=f&&d/a<=n&&(l=a)}a=Math.log(l);const p=a>=0?0:1+~~(-a/r),M=Math.pow(e,-p-1);return(t.nice||void 0===t.nice)&&(a=Math.floor(c/l+M)*l,c=c<a?a-l:a,h=Math.ceil(h/l)*l),{start:c,stop:h===c?c+l:h,step:l}},t.bootstrapCI=function(r,o,l,u){if(!r.length)return[void 0,void 0];const f=Float64Array.from(n(r,u)),i=f.length,s=o;let c,h,d,p;for(d=0,p=Array(s);d<s;++d){for(c=0,h=0;h<i;++h)c+=f[~~(t.random()*i)];p[d]=c/i}return p.sort(e),[a(p,l/2),a(p,1-l/2)]},t.cumulativeLogNormal=v,t.cumulativeNormal=g,t.cumulativeUniform=F,t.densityLogNormal=N,t.densityNormal=m,t.densityUniform=A,t.dotbin=function(t,n,e,r){r=r||(t=>t);const o=t.length,l=new Float64Array(o);let u,f=0,a=1,i=r(t[0]),s=i,c=i+n;for(;a<o;++a){if(u=r(t[a]),u>=c){for(s=(i+s)/2;f<a;++f)l[f]=s;c=u+n,i=u}s=u}for(s=(i+s)/2;f<a;++f)l[f]=s;return e?function(t,n){const e=t.length;let r,o,l=0,u=1;for(;t[l]===t[u];)++u;for(;u<e;){for(r=u+1;t[u]===t[r];)++r;if(t[u]-t[u-1]<n){for(o=u+(l+r-u-u>>1);o<u;)t[o++]=t[u];for(;o>u;)t[o--]=t[l]}l=u,u=r}return t}(l,n+n/4):l},t.quantileLogNormal=w,t.quantileNormal=b,t.quantileUniform=L,t.quantiles=i,t.quartiles=s,t.randomInteger=function(n,e){let r,o,l;null==e&&(e=n,n=0);const u={min(t){return arguments.length?(r=t||0,l=o-r,u):r},max(t){return arguments.length?(o=t||0,l=o-r,u):o},sample:()=>r+Math.floor(l*t.random()),pdf:t=>t===Math.floor(t)&&t>=r&&t<o?1/l:0,cdf(t){const n=Math.floor(t);return n<r?0:n>=o?1:(n-r+1)/l},icdf:t=>t>=0&&t<=1?r-1+Math.floor(t*l):NaN};return u.min(n).max(e)},t.randomKDE=function(n,e){const r=x();let o=0;const l={data(t){return arguments.length?(n=t,o=t?t.length:0,l.bandwidth(e)):n},bandwidth(t){return arguments.length?(!(e=t)&&n&&(e=c(n)),l):e},sample:()=>n[~~(t.random()*o)]+e*r.sample(),pdf(t){let l=0,u=0;for(;u<o;++u)l+=r.pdf((t-n[u])/e);return l/e/o},cdf(t){let l=0,u=0;for(;u<o;++u)l+=r.cdf((t-n[u])/e);return l/o},icdf(){throw Error("KDE icdf not supported.")}};return l.data(n)},t.randomLCG=function(t){return function(){return(t=(1103515245*t+12345)%2147483647)/2147483647}},t.randomLogNormal=function(t,n){let e,r;const o={mean(t){return arguments.length?(e=t||0,o):e},stdev(t){return arguments.length?(r=null==t?1:t,o):r},sample:()=>y(e,r),pdf:t=>N(t,e,r),cdf:t=>v(t,e,r),icdf:t=>w(t,e,r)};return o.mean(t).stdev(n)},t.randomMixture=function(n,e){let r,o=0;const l={weights(t){return arguments.length?(r=function(t){const n=[];let e,r=0;for(e=0;e<o;++e)r+=n[e]=null==t[e]?1:+t[e];for(e=0;e<o;++e)n[e]/=r;return n}(e=t||[]),l):e},distributions(t){return arguments.length?(t?(o=t.length,n=t):(o=0,n=[]),l.weights(e)):n},sample(){const e=t.random();let l=n[o-1],u=r[0],f=0;for(;f<o-1;u+=r[++f])if(e<u){l=n[f];break}return l.sample()},pdf(t){let e=0,l=0;for(;l<o;++l)e+=r[l]*n[l].pdf(t);return e},cdf(t){let e=0,l=0;for(;l<o;++l)e+=r[l]*n[l].cdf(t);return e},icdf(){throw Error("Mixture icdf not supported.")}};return l.distributions(n).weights(e)},t.randomNormal=x,t.randomUniform=function(t,n){let e,r;const o={min(t){return arguments.length?(e=t||0,o):e},max(t){return arguments.length?(r=null==t?1:t,o):r},sample:()=>q(e,r),pdf:t=>A(t,e,r),cdf:t=>F(t,e,r),icdf:t=>L(t,e,r)};return null==n&&(n=null==t?1:t,t=0),o.min(t).max(n)},t.regressionExp=function(t,n,e){const[r,o,l,u]=E(t,n,e);let f,a,i,s=0,c=0,h=0,d=0,p=0;P(t,n,e,((t,n)=>{f=r[p++],a=Math.log(n),i=f*n,s+=(n*a-s)/p,c+=(i-c)/p,h+=(i*a-h)/p,d+=(f*i-d)/p}));const[M,m]=S(c/u,s/u,h/u,d/u),g=t=>Math.exp(M+m*(t-l));return{coef:[Math.exp(M-m*l),m],predict:g,rSquared:U(t,n,e,u,g)}},t.regressionLinear=I,t.regressionLoess=function(t,n,e,r){const[o,l,u,f]=E(t,n,e,!0),i=o.length,s=Math.max(2,~~(r*i)),c=new Float64Array(i),h=new Float64Array(i),d=new Float64Array(i).fill(1);for(let t=-1;++t<=2;){const n=[0,s-1];for(let t=0;t<i;++t){const e=o[t],r=n[0],u=n[1],f=e-o[r]>o[u]-e?r:u;let a=0,i=0,s=0,p=0,M=0;const m=1/Math.abs(o[f]-e||1);for(let t=r;t<=u;++t){const n=o[t],r=l[t],u=D(Math.abs(e-n)*m)*d[t],f=n*u;a+=u,i+=f,s+=r*u,p+=r*f,M+=n*f}const[g,b]=S(i/a,s/a,p/a,M/a);c[t]=g+b*e,h[t]=Math.abs(l[t]-c[t]),R(o,t+1,n)}if(2===t)break;const e=a(h,.5,void 0);if(Math.abs(e)<1e-12)break;for(let t,n,r=0;r<i;++r)t=h[r]/(6*e),d[r]=t>=1?1e-12:(n=1-t*t)*n}return function(t,n,e,r){const o=t.length,l=[];let u,f=0,a=0,i=[];for(;f<o;++f)u=t[f]+e,i[0]===u?i[1]+=(n[f]-i[1])/++a:(a=0,i[1]+=r,i=[u,n[f]],l.push(i));return i[1]+=r,l}(o,c,u,f)},t.regressionLog=function(t,n,e){let r=0,o=0,l=0,u=0,f=0;P(t,n,e,((t,n)=>{++f,t=Math.log(t),r+=(t-r)/f,o+=(n-o)/f,l+=(t*n-l)/f,u+=(t*t-u)/f}));const a=S(r,o,l,u),i=t=>a[0]+a[1]*Math.log(t);return{coef:a,predict:i,rSquared:U(t,n,e,o,i)}},t.regressionPoly=function(t,n,e,r){if(1===r)return I(t,n,e);if(2===r)return k(t,n,e);const[o,l,u,f]=E(t,n,e),a=o.length,i=[],s=[],c=r+1;let h,d,p,M,m;for(h=0;h<c;++h){for(p=0,M=0;p<a;++p)M+=Math.pow(o[p],h)*l[p];for(i.push(M),m=new Float64Array(c),d=0;d<c;++d){for(p=0,M=0;p<a;++p)M+=Math.pow(o[p],h+d);m[d]=M}s.push(m)}s.push(i);const g=function(t){const n=t.length-1,e=[];let r,o,l,u,f;for(r=0;r<n;++r){for(u=r,o=r+1;o<n;++o)Math.abs(t[r][o])>Math.abs(t[r][u])&&(u=o);for(l=r;l<n+1;++l)f=t[l][r],t[l][r]=t[l][u],t[l][u]=f;for(o=r+1;o<n;++o)for(l=n;l>=r;l--)t[l][o]-=t[l][r]*t[r][o]/t[r][r]}for(o=n-1;o>=0;--o){for(f=0,l=o+1;l<n;++l)f+=t[l][o]*e[l];e[o]=(t[n][o]-f)/t[o][o]}return e}(s),b=t=>{t-=u;let n=f+g[0]+g[1]*t+g[2]*t*t;for(h=3;h<c;++h)n+=g[h]*Math.pow(t,h);return n};return{coef:C(c,g,-u,f),predict:b,rSquared:U(t,n,e,f,b)}},t.regressionPow=function(t,n,e){let r=0,o=0,l=0,u=0,f=0,a=0;P(t,n,e,((t,n)=>{const e=Math.log(t),i=Math.log(n);++a,r+=(e-r)/a,o+=(i-o)/a,l+=(e*i-l)/a,u+=(e*e-u)/a,f+=(n-f)/a}));const i=S(r,o,l,u),s=t=>i[0]*Math.pow(t,i[1]);return i[0]=Math.exp(i[0]),{coef:i,predict:s,rSquared:U(t,n,e,f,s)}},t.regressionQuad=k,t.sampleCurve=function(t,n,e,r){e=e||25,r=Math.max(e,r||200);const o=n=>[n,t(n)],l=n[0],u=n[1],f=u-l,a=f/r,i=[o(l)],s=[];if(e===r){for(let t=1;t<r;++t)i.push(o(l+t/e*f));return i.push(o(u)),i}s.push(o(u));for(let t=e;--t>0;)s.push(o(l+t/e*f));let c=i[0],h=s[s.length-1];const d=1/f,p=function(t,n){let e=t,r=t;const o=n.length;for(let t=0;t<o;++t){const o=n[t][1];o<e&&(e=o),o>r&&(r=o)}return 1/(r-e)}(c[1],s);for(;h;){const t=o((c[0]+h[0])/2);t[0]-c[0]>=a&&j(c,t,h,d,p)>T?s.push(t):(c=h,i.push(h),s.pop()),h=s[s.length-1]}return i},t.sampleLogNormal=y,t.sampleNormal=M,t.sampleUniform=q,t.setRandom=function(n){t.random=n},Object.defineProperty(t,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=vega-statistics.min.js.map |
@@ -1184,4 +1184,4 @@ import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array'; | ||
// subdivide up to accuracy of 0.1 degrees | ||
const MIN_RADIANS = 0.1 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent | ||
// subdivide up to accuracy of 0.5 degrees | ||
const MIN_RADIANS = 0.5 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent | ||
@@ -1218,4 +1218,6 @@ function sampleCurve (f, extent, minSteps, maxSteps) { | ||
let p0 = prev[0], | ||
p1 = next[next.length - 1]; | ||
let p0 = prev[0]; | ||
let p1 = next[next.length - 1]; | ||
const sx = 1 / span; | ||
const sy = scaleY(p0[1], next); | ||
@@ -1225,6 +1227,7 @@ while (p1) { | ||
const pm = point((p0[0] + p1[0]) / 2); | ||
const dx = pm[0] - p0[0] >= stop; | ||
if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) { | ||
if (dx && angleDelta(p0, pm, p1, sx, sy) > MIN_RADIANS) { | ||
// maximum resolution has not yet been met, and | ||
// subdivision midpoint sufficiently different from endpoint | ||
// subdivision midpoint is sufficiently different from endpoint | ||
// save subdivision, push midpoint onto the visitation stack | ||
@@ -1246,5 +1249,19 @@ next.push(pm); | ||
function angleDelta(p, q, r) { | ||
const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]), | ||
a1 = Math.atan2(q[1] - p[1], q[0] - p[0]); | ||
function scaleY(init, points) { | ||
let ymin = init; | ||
let ymax = init; | ||
const n = points.length; | ||
for (let i = 0; i < n; ++i) { | ||
const y = points[i][1]; | ||
if (y < ymin) ymin = y; | ||
if (y > ymax) ymax = y; | ||
} | ||
return 1 / (ymax - ymin); | ||
} | ||
function angleDelta(p, q, r, sx, sy) { | ||
const a0 = Math.atan2(sy * (r[1] - p[1]), sx * (r[0] - p[0])), | ||
a1 = Math.atan2(sy * (q[1] - p[1]), sx * (q[0] - p[0])); | ||
return Math.abs(a0 - a1); | ||
@@ -1251,0 +1268,0 @@ } |
{ | ||
"name": "vega-statistics", | ||
"version": "1.7.9", | ||
"version": "1.7.10", | ||
"description": "Statistical routines and probability distributions.", | ||
@@ -27,3 +27,3 @@ "keywords": [ | ||
}, | ||
"gitHead": "4affcbedb9d14815dbb6d3b250ed231b54fc95c0" | ||
"gitHead": "774165e29850b66ec8b79ba52a7955f1ab936ea6" | ||
} |
@@ -266,3 +266,3 @@ # vega-statistics | ||
- _base_: The number base to use for automatic bin determination (default base `10`). | ||
- _maxbins_: The maximum number of allowable bins (default `20`). | ||
- _maxbins_: The maximum number of allowable bins (default `20`). There will often be fewer bins as the domain gets sliced at "nicely" rounded values. | ||
- _span_: The value span over which to generate bin boundaries. The default is `extent[1] - extent[0]`. This parameter allows automatic step size determination over custom spans (for example, a zoomed-in region) while retaining the overall _extent_. | ||
@@ -269,0 +269,0 @@ - _step_: An exact step size to use between bins. If provided, the _maxbins_, _span_, and _steps_ options will be ignored. |
@@ -1,3 +0,3 @@ | ||
// subdivide up to accuracy of 0.1 degrees | ||
const MIN_RADIANS = 0.1 * Math.PI / 180; | ||
// subdivide up to accuracy of 0.5 degrees | ||
const MIN_RADIANS = 0.5 * Math.PI / 180; | ||
@@ -33,12 +33,16 @@ // Adaptively sample an interpolated function over a domain extent | ||
let p0 = prev[0], | ||
p1 = next[next.length - 1]; | ||
let p0 = prev[0]; | ||
let p1 = next[next.length - 1]; | ||
const sx = 1 / span; | ||
const sy = scaleY(p0[1], next); | ||
while (p1) { | ||
// midpoint for potential curve subdivision | ||
const pm = point((p0[0] + p1[0]) / 2); | ||
const dx = pm[0] - p0[0] >= stop; | ||
if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) { | ||
if (dx && angleDelta(p0, pm, p1, sx, sy) > MIN_RADIANS) { | ||
// maximum resolution has not yet been met, and | ||
// subdivision midpoint sufficiently different from endpoint | ||
// subdivision midpoint is sufficiently different from endpoint | ||
// save subdivision, push midpoint onto the visitation stack | ||
@@ -59,6 +63,20 @@ next.push(pm); | ||
function angleDelta(p, q, r) { | ||
const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]), | ||
a1 = Math.atan2(q[1] - p[1], q[0] - p[0]); | ||
function scaleY(init, points) { | ||
let ymin = init; | ||
let ymax = init; | ||
const n = points.length; | ||
for (let i = 0; i < n; ++i) { | ||
const y = points[i][1]; | ||
if (y < ymin) ymin = y; | ||
if (y > ymax) ymax = y; | ||
} | ||
return 1 / (ymax - ymin); | ||
} | ||
function angleDelta(p, q, r, sx, sy) { | ||
const a0 = Math.atan2(sy * (r[1] - p[1]), sx * (r[0] - p[0])), | ||
a1 = Math.atan2(sy * (q[1] - p[1]), sx * (q[0] - p[0])); | ||
return Math.abs(a0 - a1); | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
203612
3296