Skip to content

Commit 9cd6a46

Browse files
committed
Fix d3#236 - scale.pow accepts negative values.
1 parent 7590713 commit 9cd6a46

5 files changed

Lines changed: 15 additions & 29 deletions

File tree

d3.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2430,9 +2430,8 @@ d3.scale.pow = function() {
24302430

24312431
scale.domain = function(x) {
24322432
if (!arguments.length) return linear.domain().map(powb);
2433-
var pow = (x[0] || x[x.length - 1]) < 0 ? d3_scale_pown : d3_scale_pow;
2434-
powp = pow(exponent);
2435-
powb = pow(1 / exponent);
2433+
powp = d3_scale_powPow(exponent);
2434+
powb = d3_scale_powPow(1 / exponent);
24362435
linear.domain(x.map(powp));
24372436
return scale;
24382437
};
@@ -2459,15 +2458,9 @@ d3.scale.pow = function() {
24592458
return d3_scale_linearRebind(scale, linear);
24602459
};
24612460

2462-
function d3_scale_pow(e) {
2461+
function d3_scale_powPow(e) {
24632462
return function(x) {
2464-
return Math.pow(x, e);
2465-
};
2466-
}
2467-
2468-
function d3_scale_pown(e) {
2469-
return function(x) {
2470-
return -Math.pow(-x, e);
2463+
return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
24712464
};
24722465
}
24732466
d3.scale.sqrt = function() {

d3.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/scale/pow.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@ d3.scale.pow = function() {
1414

1515
scale.domain = function(x) {
1616
if (!arguments.length) return linear.domain().map(powb);
17-
var pow = (x[0] || x[x.length - 1]) < 0 ? d3_scale_pown : d3_scale_pow;
18-
powp = pow(exponent);
19-
powb = pow(1 / exponent);
17+
powp = d3_scale_powPow(exponent);
18+
powb = d3_scale_powPow(1 / exponent);
2019
linear.domain(x.map(powp));
2120
return scale;
2221
};
@@ -43,14 +42,8 @@ d3.scale.pow = function() {
4342
return d3_scale_linearRebind(scale, linear);
4443
};
4544

46-
function d3_scale_pow(e) {
45+
function d3_scale_powPow(e) {
4746
return function(x) {
48-
return Math.pow(x, e);
49-
};
50-
}
51-
52-
function d3_scale_pown(e) {
53-
return function(x) {
54-
return -Math.pow(-x, e);
47+
return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
5548
};
5649
}

test/scale/test-pow.out

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
domain([0, 1]).range([0, 1]):
2-
-0.5 -> 0.250
2+
-0.5 -> 0.250
33
0.0 -> 0.000
44
0.5 -> 0.250
55
1.0 -> 1.000
@@ -21,14 +21,14 @@ domain([01/01/1990, 01/01/1991]).range([0, 1]):
2121
03/15/1991 -> 1.206
2222

2323
domain([0, 1]).range(["red", "blue"]):
24-
-0.5 -> rgb(191,0,64)
24+
-0.5 -> rgb(319,0,-64)
2525
0.0 -> rgb(255,0,0)
2626
0.5 -> rgb(191,0,64)
2727
1.0 -> rgb(0,0,255)
2828
1.5 -> rgb(-319,0,574)
2929

3030
domain([0, 1]).range(["red", "blue"]).interpolate(hsl):
31-
-0.50 -> #ffff00
31+
-0.50 -> #ff00ff
3232
0.00 -> #ff0000
3333
0.50 -> #ffff00
3434
√0.50 -> #00ff00

test/scale/test-sqrt.out

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
domain([0, 1]).range([0, 1]):
2-
-0.50 -> NaN
2+
-0.50 -> −0.707
33
0.00 -> 0.000
44
0.25 -> 0.500
55
0.50 -> 0.707
66
1.00 -> 1.000
77
4.00 -> 2.000
88

99
domain([0, -1]).range([0, 1]):
10-
0.50 -> NaN
10+
0.50 -> −0.707
1111
0.00 -> 0.000
1212
-0.25 -> 0.500
1313
-0.50 -> 0.707

0 commit comments

Comments
 (0)