Skip to content

Commit

Permalink
Merge branch 'ordinal'
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Aug 1, 2011
2 parents 2c52c37 + 9cd6a46 commit 5ba1c2a
Show file tree
Hide file tree
Showing 11 changed files with 221 additions and 73 deletions.
6 changes: 4 additions & 2 deletions Makefile
Expand Up @@ -71,7 +71,8 @@ d3.core.js: \
src/core/hsl.js \
src/core/selection.js \
src/core/transition.js \
src/core/timer.js
src/core/timer.js \
src/core/noop.js

d3.scale.js: \
src/scale/scale.js \
Expand Down Expand Up @@ -229,7 +230,8 @@ test/scale: \
test/scale/test-polylinear.test \
test/scale/test-pow.test \
test/scale/test-quantile.test \
test/scale/test-sqrt.test
test/scale/test-sqrt.test \
test/scale/test-ordinal.test

test/svg: \
test/svg/test-arc.test \
Expand Down
67 changes: 35 additions & 32 deletions d3.js
@@ -1,4 +1,4 @@
(function(){d3 = {version: "1.29.0"}; // semver
(function(){d3 = {version: "1.29.1"}; // semver
if (!Date.now) Date.now = function() {
return +new Date;
};
Expand Down Expand Up @@ -2178,6 +2178,7 @@ var d3_timer_frame = window.requestAnimationFrame
|| window.oRequestAnimationFrame
|| window.msRequestAnimationFrame
|| function(callback) { setTimeout(callback, 17); };
function d3_noop() {}
d3.scale = {};

function d3_scaleExtent(domain) {
Expand Down Expand Up @@ -2429,9 +2430,8 @@ d3.scale.pow = function() {

scale.domain = function(x) {
if (!arguments.length) return linear.domain().map(powb);
var pow = (x[0] || x[x.length - 1]) < 0 ? d3_scale_pown : d3_scale_pow;
powp = pow(exponent);
powb = pow(1 / exponent);
powp = d3_scale_powPow(exponent);
powb = d3_scale_powPow(1 / exponent);
linear.domain(x.map(powp));
return scale;
};
Expand All @@ -2458,15 +2458,9 @@ d3.scale.pow = function() {
return d3_scale_linearRebind(scale, linear);
};

function d3_scale_pow(e) {
function d3_scale_powPow(e) {
return function(x) {
return Math.pow(x, e);
};
}

function d3_scale_pown(e) {
return function(x) {
return -Math.pow(-x, e);
return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
};
}
d3.scale.sqrt = function() {
Expand All @@ -2476,7 +2470,8 @@ d3.scale.ordinal = function() {
var domain = [],
index = {},
range = [],
rangeBand = 0;
rangeBand = 0,
rerange = d3_noop;

function scale(x) {
var i = x in index ? index[x] : (index[x] = domain.push(x) - 1);
Expand All @@ -2491,46 +2486,54 @@ d3.scale.ordinal = function() {
x = domain[i];
if (!(x in index)) index[x] = ++j;
}
rerange();
return scale;
};

scale.range = function(x) {
if (!arguments.length) return range;
range = x;
rerange = d3_noop;
return scale;
};

scale.rangePoints = function(x, padding) {
if (arguments.length < 2) padding = 0;
var start = x[0],
stop = x[1],
step = (stop - start) / (domain.length - 1 + padding);
range = domain.length == 1
? [(start + stop) / 2]
: d3.range(start + step * padding / 2, stop + step / 2, step);
rangeBand = 0;
(rerange = function() {
var start = x[0],
stop = x[1],
step = (stop - start) / (domain.length - 1 + padding);
range = domain.length == 1
? [(start + stop) / 2]
: d3.range(start + step * padding / 2, stop + step / 2, step);
rangeBand = 0;
})();
return scale;
};

scale.rangeBands = function(x, padding) {
if (arguments.length < 2) padding = 0;
var start = x[0],
stop = x[1],
step = (stop - start) / (domain.length + padding);
range = d3.range(start + step * padding, stop, step);
rangeBand = step * (1 - padding);
(rerange = function() {
var start = x[0],
stop = x[1],
step = (stop - start) / (domain.length + padding);
range = d3.range(start + step * padding, stop, step);
rangeBand = step * (1 - padding);
})();
return scale;
};

scale.rangeRoundBands = function(x, padding) {
if (arguments.length < 2) padding = 0;
var start = x[0],
stop = x[1],
diff = stop - start,
step = Math.floor(diff / (domain.length + padding)),
err = diff - (domain.length - padding) * step;
range = d3.range(start + Math.round(err / 2), stop, step);
rangeBand = Math.round(step * (1 - padding));
(rerange = function() {
var start = x[0],
stop = x[1],
diff = stop - start,
step = Math.floor(diff / (domain.length + padding)),
err = diff - (domain.length - padding) * step;
range = d3.range(start + Math.round(err / 2), stop, step);
rangeBand = Math.round(step * (1 - padding));
})();
return scale;
};

Expand Down
4 changes: 2 additions & 2 deletions d3.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/core/core.js
@@ -1 +1 @@
d3 = {version: "1.29.0"}; // semver
d3 = {version: "1.29.1"}; // semver
1 change: 1 addition & 0 deletions src/core/noop.js
@@ -0,0 +1 @@
function d3_noop() {}
49 changes: 29 additions & 20 deletions src/scale/ordinal.js
Expand Up @@ -2,7 +2,8 @@ d3.scale.ordinal = function() {
var domain = [],
index = {},
range = [],
rangeBand = 0;
rangeBand = 0,
rerange = d3_noop;

function scale(x) {
var i = x in index ? index[x] : (index[x] = domain.push(x) - 1);
Expand All @@ -17,46 +18,54 @@ d3.scale.ordinal = function() {
x = domain[i];
if (!(x in index)) index[x] = ++j;
}
rerange();
return scale;
};

scale.range = function(x) {
if (!arguments.length) return range;
range = x;
rerange = d3_noop;
return scale;
};

scale.rangePoints = function(x, padding) {
if (arguments.length < 2) padding = 0;
var start = x[0],
stop = x[1],
step = (stop - start) / (domain.length - 1 + padding);
range = domain.length == 1
? [(start + stop) / 2]
: d3.range(start + step * padding / 2, stop + step / 2, step);
rangeBand = 0;
(rerange = function() {
var start = x[0],
stop = x[1],
step = (stop - start) / (domain.length - 1 + padding);
range = domain.length == 1
? [(start + stop) / 2]
: d3.range(start + step * padding / 2, stop + step / 2, step);
rangeBand = 0;
})();
return scale;
};

scale.rangeBands = function(x, padding) {
if (arguments.length < 2) padding = 0;
var start = x[0],
stop = x[1],
step = (stop - start) / (domain.length + padding);
range = d3.range(start + step * padding, stop, step);
rangeBand = step * (1 - padding);
(rerange = function() {
var start = x[0],
stop = x[1],
step = (stop - start) / (domain.length + padding);
range = d3.range(start + step * padding, stop, step);
rangeBand = step * (1 - padding);
})();
return scale;
};

scale.rangeRoundBands = function(x, padding) {
if (arguments.length < 2) padding = 0;
var start = x[0],
stop = x[1],
diff = stop - start,
step = Math.floor(diff / (domain.length + padding)),
err = diff - (domain.length - padding) * step;
range = d3.range(start + Math.round(err / 2), stop, step);
rangeBand = Math.round(step * (1 - padding));
(rerange = function() {
var start = x[0],
stop = x[1],
diff = stop - start,
step = Math.floor(diff / (domain.length + padding)),
err = diff - (domain.length - padding) * step;
range = d3.range(start + Math.round(err / 2), stop, step);
rangeBand = Math.round(step * (1 - padding));
})();
return scale;
};

Expand Down
15 changes: 4 additions & 11 deletions src/scale/pow.js
Expand Up @@ -14,9 +14,8 @@ d3.scale.pow = function() {

scale.domain = function(x) {
if (!arguments.length) return linear.domain().map(powb);
var pow = (x[0] || x[x.length - 1]) < 0 ? d3_scale_pown : d3_scale_pow;
powp = pow(exponent);
powb = pow(1 / exponent);
powp = d3_scale_powPow(exponent);
powb = d3_scale_powPow(1 / exponent);
linear.domain(x.map(powp));
return scale;
};
Expand All @@ -43,14 +42,8 @@ d3.scale.pow = function() {
return d3_scale_linearRebind(scale, linear);
};

function d3_scale_pow(e) {
function d3_scale_powPow(e) {
return function(x) {
return Math.pow(x, e);
};
}

function d3_scale_pown(e) {
return function(x) {
return -Math.pow(-x, e);
return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
};
}
79 changes: 79 additions & 0 deletions test/scale/test-ordinal.js
@@ -0,0 +1,79 @@
require("./../../lib/env-js/envjs/node");
require("./../../d3");

var x = d3.scale.ordinal().range(["a", "b", "c"]);
console.log("range([a, b, c]):");
console.log(" 0 -> " + x(0));
console.log(" 1 -> " + x(1));
console.log(" 2 -> " + x(2));
console.log(" 3 -> " + x(3));
console.log(" 4 -> " + x(4));
console.log(" 5 -> " + x(5));
console.log(" 6 -> " + x(6));
console.log(" 0 -> " + x(0));
console.log(" 1 -> " + x(1));
console.log(" 2 -> " + x(2));
console.log(" 3 -> " + x(3));
console.log("");

x.domain([]);
console.log("domain([]).range([a, b, c]):");
console.log(" 1 -> " + x(1));
console.log(" 2 -> " + x(2));
console.log(" 3 -> " + x(3));
console.log(" 0 -> " + x(0));
console.log(" 1 -> " + x(1));
console.log(" 2 -> " + x(2));
console.log("");

var x = d3.scale.ordinal().domain(["a", "b", "c"]).rangePoints([0, 120]);
console.log("domain([a, b, c]).rangePoints([0, 120]):");
console.log(" a -> " + x("a"));
console.log(" b -> " + x("b"));
console.log(" c -> " + x("c"));
console.log(" d -> " + x("d"));
console.log("");

var x = d3.scale.ordinal().rangePoints([0, 120]).domain(["a", "b", "c"]);
console.log("rangePoints([0, 120]).domain([a, b, c]):");
console.log(" a -> " + x("a"));
console.log(" b -> " + x("b"));
console.log(" c -> " + x("c"));
console.log(" d -> " + x("d"));
console.log("");

var x = d3.scale.ordinal().domain(["a", "b", "c"]).rangeBands([0, 120]);
console.log("domain([a, b, c]).rangeBands([0, 120]):");
console.log(" rangeBand: " + x.rangeBand());
console.log(" a -> " + x("a"));
console.log(" b -> " + x("b"));
console.log(" c -> " + x("c"));
console.log(" d -> " + x("d"));
console.log("");

var x = d3.scale.ordinal().rangeBands([0, 120]).domain(["a", "b", "c"]);
console.log("rangeBands([0, 120]).domain([a, b, c]):");
console.log(" rangeBand: " + x.rangeBand());
console.log(" a -> " + x("a"));
console.log(" b -> " + x("b"));
console.log(" c -> " + x("c"));
console.log(" d -> " + x("d"));
console.log("");

var x = d3.scale.ordinal().domain(["a", "b", "c"]).rangeRoundBands([0, 119]);
console.log("domain([a, b, c]).rangeRoundBands([0, 119]):");
console.log(" rangeBand: " + x.rangeBand());
console.log(" a -> " + x("a"));
console.log(" b -> " + x("b"));
console.log(" c -> " + x("c"));
console.log(" d -> " + x("d"));
console.log("");

var x = d3.scale.ordinal().rangeRoundBands([0, 119]).domain(["a", "b", "c"]);
console.log("rangeRoundBands([0, 119]).domain([a, b, c]):");
console.log(" rangeBand: " + x.rangeBand());
console.log(" a -> " + x("a"));
console.log(" b -> " + x("b"));
console.log(" c -> " + x("c"));
console.log(" d -> " + x("d"));
console.log("");

0 comments on commit 5ba1c2a

Please sign in to comment.