Skip to content

Commit d2943a0

Browse files
committed
Better handling of empty domains for nice scales.
1 parent 4adfae7 commit d2943a0

7 files changed

Lines changed: 20 additions & 6 deletions

File tree

d3.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2202,8 +2202,8 @@ function d3_scale_nice(domain, nice) {
22022202
return domain;
22032203
}
22042204

2205-
function d3_scale_niceDefault() {
2206-
return Math;
2205+
function d3_scale_niceDefault(dx) {
2206+
return dx ? Math : {floor: Number, ceil: Number};
22072207
}
22082208
d3.scale.linear = function() {
22092209
return d3_scale_linear([0, 1], [0, 1], d3.interpolate, false);
@@ -2287,6 +2287,7 @@ function d3_scale_linearRebind(scale, linear) {
22872287
}
22882288

22892289
function d3_scale_linearNice(dx) {
2290+
if (dx === 0) return {floor: Number, ceil: Number};
22902291
dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
22912292
return {
22922293
floor: function(x) { return Math.floor(x / dx) * dx; },

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/linear.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ function d3_scale_linearRebind(scale, linear) {
8080
}
8181

8282
function d3_scale_linearNice(dx) {
83+
if (dx === 0) return {floor: Number, ceil: Number};
8384
dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1);
8485
return {
8586
floor: function(x) { return Math.floor(x / dx) * dx; },

src/scale/nice.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ function d3_scale_nice(domain, nice) {
1616
return domain;
1717
}
1818

19-
function d3_scale_niceDefault() {
20-
return Math;
19+
function d3_scale_niceDefault(dx) {
20+
return dx ? Math : {floor: Number, ceil: Number};
2121
}

test/scale/linear-test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ suite.addBatch({
180180
assert.deepEqual(x.domain(), [130, 0]);
181181
var x = linear().domain([0, .49]).nice();
182182
assert.deepEqual(x.domain(), [0, .5]);
183+
var x = linear().domain([0, 0]).nice();
184+
assert.deepEqual(x.domain(), [0, 0]);
185+
var x = linear().domain([.5, .5]).nice();
186+
assert.deepEqual(x.domain(), [.5, .5]);
183187
},
184188
"nicing a polylinear domain only affects the extent": function(linear) {
185189
var x = linear().domain([1.1, 1, 2, 3, 10.9]).nice();

test/scale/log-test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,10 @@ suite.addBatch({
194194
assert.deepEqual(x.domain(), [1000, 1]);
195195
var x = log().domain([.01, .49]).nice();
196196
assert.deepEqual(x.domain(), [.01, 1]);
197+
var x = log().domain([0, 0]).nice();
198+
assert.deepEqual(x.domain(), [0, 0]);
199+
var x = log().domain([.5, .5]).nice();
200+
assert.inDelta(x.domain(), [.5, .5], 1e-6);
197201
},
198202
"nicing a polylog domain only affects the extent": function(log) {
199203
var x = log().domain([1.1, 1.5, 10.9]).nice();

test/scale/pow-test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ suite.addBatch({
187187
assert.deepEqual(x.domain(), [130, 0]);
188188
var x = pow().domain([0, .49]).nice();
189189
assert.deepEqual(x.domain(), [0, .5]);
190+
var x = pow().domain([0, 0]).nice();
191+
assert.deepEqual(x.domain(), [0, 0]);
192+
var x = pow().domain([.5, .5]).nice();
193+
assert.deepEqual(x.domain(), [.5, .5]);
190194
},
191195
"nicing a polypower domain only affects the extent": function(pow) {
192196
var x = pow().domain([1.1, 1, 2, 3, 10.9]).nice();

0 commit comments

Comments
 (0)