@@ -2128,6 +2128,27 @@ var d3_timer_frame = window.requestAnimationFrame
21282128 || window . msRequestAnimationFrame
21292129 || function ( callback ) { setTimeout ( callback , 17 ) ; } ;
21302130d3 . scale = { } ;
2131+ function d3_scale_nice ( domain , nice ) {
2132+ var i0 = 0 ,
2133+ i1 = domain . length - 1 ,
2134+ x0 = domain [ i0 ] ,
2135+ x1 = domain [ i1 ] ,
2136+ dx ;
2137+
2138+ if ( x1 < x0 ) {
2139+ dx = i0 ; i0 = i1 ; i1 = dx ;
2140+ dx = x0 ; x0 = x1 ; x1 = dx ;
2141+ }
2142+
2143+ nice = nice ( x1 - x0 ) ;
2144+ domain [ i0 ] = nice . floor ( x0 ) ;
2145+ domain [ i1 ] = nice . ceil ( x1 ) ;
2146+ return domain ;
2147+ }
2148+
2149+ function d3_scale_niceDefault ( ) {
2150+ return Math ;
2151+ }
21312152d3 . scale . linear = function ( ) {
21322153 var domain = [ 0 , 1 ] ,
21332154 range = [ 0 , 1 ] ,
@@ -2213,23 +2234,20 @@ d3.scale.linear = function() {
22132234 } ;
22142235
22152236 scale . nice = function ( ) {
2216- var last = domain . length - 1 ,
2217- start = domain [ 0 ] ,
2218- end = domain [ last ] ,
2219- reverse = end < start ,
2220- min = reverse ? end : start ,
2221- max = reverse ? start : end ,
2222- span = max - min ;
2223-
2224- var step = Math . pow ( 10 , Math . round ( Math . log ( span ) / Math . log ( 10 ) ) - 1 ) ;
2225- domain [ reverse ? last : 0 ] = Math . floor ( min / step ) * step ;
2226- domain [ reverse ? 0 : last ] = Math . ceil ( max / step ) * step ;
2227-
2237+ d3_scale_nice ( domain , d3_scale_linearNice ) ;
22282238 return rescale ( ) ;
22292239 } ;
22302240
22312241 return rescale ( ) ;
22322242} ;
2243+
2244+ function d3_scale_linearNice ( dx ) {
2245+ dx = Math . pow ( 10 , Math . round ( Math . log ( dx ) / Math . log ( 10 ) ) - 1 ) ;
2246+ return {
2247+ floor : function ( x ) { return Math . floor ( x / dx ) * dx ; } ,
2248+ ceil : function ( x ) { return Math . ceil ( x / dx ) * dx ; } ,
2249+ } ;
2250+ }
22332251function d3_scale_bilinear ( domain , range , uninterpolate , interpolate ) {
22342252 var u = uninterpolate ( domain [ 0 ] , domain [ 1 ] ) ,
22352253 i = interpolate ( range [ 0 ] , range [ 1 ] ) ;
@@ -2280,16 +2298,8 @@ d3.scale.log = function() {
22802298 scale . clamp = d3 . rebind ( scale , linear . clamp ) ;
22812299
22822300 scale . nice = function ( ) {
2283- var domain = linear . domain ( ) . map ( pow ) ,
2284- last = domain . length - 1 ,
2285- start = domain [ 0 ] ,
2286- end = domain [ last ] ,
2287- reverse = end < start ,
2288- min = reverse ? end : start ,
2289- max = reverse ? start : end ;
2290- domain [ reverse ? last : 0 ] = log . floor ( min ) ;
2291- domain [ reverse ? 0 : last ] = log . ceil ( max ) ;
2292- return scale . domain ( domain ) ;
2301+ linear . domain ( d3_scale_nice ( linear . domain ( ) , d3_scale_niceDefault ) ) ;
2302+ return scale ;
22932303 } ;
22942304
22952305 scale . ticks = function ( ) {
@@ -2336,22 +2346,6 @@ d3_scale_log.pow = function(x) {
23362346d3_scale_logn . pow = function ( x ) {
23372347 return - Math . pow ( 10 , - x ) ;
23382348} ;
2339-
2340- d3_scale_log . floor = function ( x ) {
2341- return d3_scale_log . pow ( Math . floor ( d3_scale_log ( x ) ) ) ;
2342- } ;
2343-
2344- d3_scale_logn . floor = function ( x ) {
2345- return d3_scale_logn . pow ( Math . floor ( d3_scale_logn ( x ) ) ) ;
2346- } ;
2347-
2348- d3_scale_log . ceil = function ( x ) {
2349- return d3_scale_log . pow ( Math . ceil ( d3_scale_log ( x ) ) ) ;
2350- } ;
2351-
2352- d3_scale_logn . ceil = function ( x ) {
2353- return d3_scale_logn . pow ( Math . ceil ( d3_scale_logn ( x ) ) ) ;
2354- } ;
23552349d3 . scale . pow = function ( ) {
23562350 var linear = d3 . scale . linear ( ) ,
23572351 tick = d3 . scale . linear ( ) , // TODO better tick formatting...
@@ -2385,16 +2379,7 @@ d3.scale.pow = function() {
23852379 scale . tickFormat = tick . tickFormat ;
23862380
23872381 scale . nice = function ( ) {
2388- var domain = linear . domain ( ) . map ( powb ) ,
2389- last = domain . length - 1 ,
2390- start = domain [ 0 ] ,
2391- end = domain [ last ] ,
2392- reverse = end < start ,
2393- min = reverse ? end : start ,
2394- max = reverse ? start : end ;
2395- domain [ reverse ? last : 0 ] = Math . floor ( min ) ;
2396- domain [ reverse ? 0 : last ] = Math . ceil ( max ) ;
2397- return scale . domain ( domain ) ;
2382+ return scale . domain ( d3_scale_nice ( scale . domain ( ) , d3_scale_niceDefault ) ) ;
23982383 } ;
23992384
24002385 scale . exponent = function ( x ) {
0 commit comments