Skip to content

Commit

Permalink
move pseudo-random seeder and generator to Lib
Browse files Browse the repository at this point in the history
  • Loading branch information
etpinard committed Feb 21, 2018
1 parent ba40db9 commit 20c3a00
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 19 deletions.
16 changes: 16 additions & 0 deletions src/lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -876,3 +876,19 @@ lib.subplotSort = function(a, b) {
}
return numB - numA;
};

// repeatable pseudorandom generator
var randSeed = 2000000000;

lib.seedPseudoRandom = function() {
randSeed = 2000000000;
};

lib.pseudoRandom = function() {
var lastVal = randSeed;
randSeed = (69069 * randSeed + 1) % 4294967296;
// don't let consecutive vals be too close together
// gets away from really trying to be random, in favor of better local uniformity
if(Math.abs(randSeed - lastVal) < 429496729) return lib.pseudoRandom();
return randSeed / 4294967296;
};
22 changes: 3 additions & 19 deletions src/traces/box/plot.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,6 @@ var d3 = require('d3');
var Lib = require('../../lib');
var Drawing = require('../../components/drawing');

// repeatable pseudorandom generator
var randSeed = 2000000000;

function seed() {
randSeed = 2000000000;
}

function rand() {
var lastVal = randSeed;
randSeed = (69069 * randSeed + 1) % 4294967296;
// don't let consecutive vals be too close together
// gets away from really trying to be random, in favor of better local uniformity
if(Math.abs(randSeed - lastVal) < 429496729) return rand();
return randSeed / 4294967296;
}

// constants for dynamic jitter (ie less jitter for sparser points)
var JITTERCOUNT = 5; // points either side of this to include
var JITTERSPREAD = 0.01; // fraction of IQR to count as "dense"
Expand Down Expand Up @@ -179,8 +163,8 @@ function plotPoints(sel, axes, trace, t) {
// to support violin points
var mode = trace.boxpoints || trace.points;

// repeatable pseudorandom number generator
seed();
// repeatable pseudo-random number generator
Lib.seedPseudoRandom();

sel.selectAll('g.points')
// since box plot points get an extra level of nesting, each
Expand Down Expand Up @@ -247,7 +231,7 @@ function plotPoints(sel, axes, trace, t) {
var v = pt.v;

var jitterOffset = trace.jitter ?
(newJitter * jitterFactors[i] * (rand() - 0.5)) :
(newJitter * jitterFactors[i] * (Lib.pseudoRandom() - 0.5)) :
0;

var posPx = d.pos + bPos + bdPos * (trace.pointpos + jitterOffset);
Expand Down

0 comments on commit 20c3a00

Please sign in to comment.