@@ -102,6 +102,9 @@ function getMinMax(data, _i0, _i1, sorted = 0, log = false) {
102102}
103103
104104function rangeLog ( min , max , base , fullMags ) {
105+ if ( base == 2 )
106+ fullMags = true ;
107+
105108 let minSign = sign ( min ) ;
106109 let maxSign = sign ( max ) ;
107110
@@ -121,8 +124,11 @@ function rangeLog(min, max, base, fullMags) {
121124 let growMinAbs = minSign == 1 ? floor : ceil ;
122125 let growMaxAbs = maxSign == 1 ? ceil : floor ;
123126
124- let minExp = growMinAbs ( logFn ( abs ( min ) ) ) ;
125- let maxExp = growMaxAbs ( logFn ( abs ( max ) ) ) ;
127+ let minLogAbs = logFn ( abs ( min ) ) ;
128+ let maxLogAbs = logFn ( abs ( max ) ) ;
129+
130+ let minExp = growMinAbs ( minLogAbs ) ;
131+ let maxExp = growMaxAbs ( maxLogAbs ) ;
126132
127133 let minIncr = pow ( base , minExp ) ;
128134 let maxIncr = pow ( base , maxExp ) ;
@@ -135,13 +141,13 @@ function rangeLog(min, max, base, fullMags) {
135141 maxIncr = roundDec ( maxIncr , - maxExp ) ;
136142 }
137143
138- if ( fullMags || base == 2 ) {
144+ if ( fullMags ) {
139145 min = minIncr * minSign ;
140146 max = maxIncr * maxSign ;
141147 }
142148 else {
143- min = incrRoundDn ( min , minIncr ) ;
144- max = incrRoundUp ( max , maxIncr ) ;
149+ min = incrRoundDn ( min , pow ( base , floor ( minLogAbs ) ) , false ) ;
150+ max = incrRoundUp ( max , pow ( base , floor ( maxLogAbs ) ) , false ) ;
145151 }
146152
147153 return [ min , max ] ;
@@ -355,16 +361,16 @@ const fixFloat = val => {
355361 return roundDec ( val , len ) ;
356362} ;
357363
358- function incrRound ( num , incr ) {
359- return fixFloat ( roundDec ( fixFloat ( num / incr ) ) * incr ) ;
364+ function incrRound ( num , incr , _fixFloat = true ) {
365+ return _fixFloat ? fixFloat ( roundDec ( fixFloat ( num / incr ) ) * incr ) : roundDec ( num / incr ) * incr ;
360366}
361367
362- function incrRoundUp ( num , incr ) {
363- return fixFloat ( ceil ( fixFloat ( num / incr ) ) * incr ) ;
368+ function incrRoundUp ( num , incr , _fixFloat = true ) {
369+ return _fixFloat ? fixFloat ( ceil ( fixFloat ( num / incr ) ) * incr ) : ceil ( num / incr ) * incr ;
364370}
365371
366- function incrRoundDn ( num , incr ) {
367- return fixFloat ( floor ( fixFloat ( num / incr ) ) * incr ) ;
372+ function incrRoundDn ( num , incr , _fixFloat = true ) {
373+ return _fixFloat ? fixFloat ( floor ( fixFloat ( num / incr ) ) * incr ) : floor ( num / incr ) * incr ;
368374}
369375
370376// https://stackoverflow.com/a/48764436
@@ -2865,13 +2871,13 @@ function snapNumY(self, dataMin, dataMax) {
28652871}
28662872
28672873function snapLogY ( self , dataMin , dataMax , scale ) {
2868- return dataMin == null ? nullNullTuple : rangeLog ( dataMin , dataMax , self . scales [ scale ] . log , false ) ;
2874+ return dataMin == null ? nullNullTuple : rangeLog ( dataMin , dataMax , self . scales [ scale ] . log , true ) ;
28692875}
28702876
28712877const snapLogX = snapLogY ;
28722878
28732879function snapAsinhY ( self , dataMin , dataMax , scale ) {
2874- return dataMin == null ? nullNullTuple : rangeAsinh ( dataMin , dataMax , self . scales [ scale ] . log , false ) ;
2880+ return dataMin == null ? nullNullTuple : rangeAsinh ( dataMin , dataMax , self . scales [ scale ] . log , true ) ;
28752881}
28762882
28772883const snapAsinhX = snapAsinhY ;
0 commit comments