Skip to content

Commit 8421fca

Browse files
committed
Fix "nice" log scales.
Turns out we just needed to test for reversed domains. Fixes d3#176.
1 parent e1daa47 commit 8421fca

4 files changed

Lines changed: 22 additions & 10 deletions

File tree

d3.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2279,9 +2279,15 @@ d3.scale.log = function() {
22792279
scale.clamp = d3.rebind(scale, linear.clamp);
22802280

22812281
scale.nice = function() {
2282-
var d = linear.domain().map(pow);
2283-
linear.domain([log.floor(d[0]), log.ceil(d[1])].map(log));
2284-
return scale;
2282+
var d = linear.domain().map(pow),
2283+
start = d[0],
2284+
end = d[1],
2285+
reverse = end < start,
2286+
min = reverse ? end : start,
2287+
max = reverse ? start : end,
2288+
domain = [log.floor(min), log.ceil(max)];
2289+
if (reverse) domain.reverse();
2290+
return scale.domain(domain);
22852291
};
22862292

22872293
scale.ticks = 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/log.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,15 @@ d3.scale.log = function() {
2525
scale.clamp = d3.rebind(scale, linear.clamp);
2626

2727
scale.nice = function() {
28-
var d = linear.domain().map(pow);
29-
linear.domain([log.floor(d[0]), log.ceil(d[1])].map(log));
30-
return scale;
28+
var d = linear.domain().map(pow),
29+
start = d[0],
30+
end = d[1],
31+
reverse = end < start,
32+
min = reverse ? end : start,
33+
max = reverse ? start : end,
34+
domain = [log.floor(min), log.ceil(max)];
35+
if (reverse) domain.reverse();
36+
return scale.domain(domain);
3137
};
3238

3339
scale.ticks = function() {

tests/test-scale-log.out

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ domain([ 1.100, 10.900 ]).nice():
5353
1.000, 100.000
5454

5555
domain([ 10.900, 1.100 ]).nice():
56-
10.000, 10.000
56+
100.000, 1.000
5757

5858
domain([ 0.700, 11.001 ]).nice():
5959
0.100, 100.000
6060

6161
domain([ 123.100, 6.700 ]).nice():
62-
100.000, 10.000
62+
1000.000, 1.000
6363

6464
domain([ 0.000, 0.490 ]).nice():
6565
0.000, 1.000

0 commit comments

Comments
 (0)