@@ -198,21 +198,27 @@ module.exports = function setConvert(ax, fullLayout) {
198198 if ( ! len ) return _l2p ( v , ax . _m , ax . _b ) ;
199199
200200 var isY = axLetter === 'y' ;
201- var pos = isY ? - v : v ;
201+ var pos = v ;
202202
203- var q = 0 ;
204- for ( var i = 0 ; i < len ; i ++ ) {
203+ var flip = isY ;
204+ if ( ax . range [ 0 ] > ax . range [ 1 ] ) flip = ! flip ;
205+ var signAx = flip ? - 1 : 1 ;
206+
207+ var first = 0 ;
208+ var last = len - 1 ;
209+ var q = first ;
210+ for ( var i = first ; i <= last ; i += 1 ) {
205211 var nextI = i + 1 ;
206212 var brk = ax . _rangebreaks [ i ] ;
207213
208- var min = isY ? - brk . max : brk . min ;
209- var max = isY ? - brk . min : brk . max ;
214+ var min = brk . min ;
215+ var max = brk . max ;
210216
211- if ( pos < min ) break ;
212- if ( pos > max ) q = nextI ;
217+ if ( signAx * pos < signAx * min ) break ;
218+ if ( signAx * pos > signAx * max ) q = nextI ;
213219 else {
214220 // when falls into break, pick 'closest' offset
215- q = pos > ( min + max ) / 2 ? nextI : i ;
221+ q = signAx * pos > signAx * ( min + max ) / 2 ? nextI : i ;
216222 break ;
217223 }
218224 }
@@ -226,18 +232,15 @@ module.exports = function setConvert(ax, fullLayout) {
226232 var isY = axLetter === 'y' ;
227233 var pos = px ;
228234
229- var reversed = ax . range [ 0 ] > ax . range [ 1 ] ;
230- var signAx = reversed ? - 1 : 1 ;
231-
232235 var first = 0 ;
233236 var last = len - 1 ;
234237 var q = first ;
235238 for ( var i = first ; i <= last ; i += 1 ) {
236239 var nextI = i + 1 ;
237240 var brk = ax . _rangebreaks [ i ] ;
238241
239- if ( signAx * pos < signAx * brk . pmin ) break ;
240- if ( signAx * pos > signAx * brk . pmax ) q = nextI ;
242+ if ( pos < brk . pmin ) break ;
243+ if ( pos > brk . pmax ) q = nextI ;
241244 }
242245
243246 return _p2l ( px , ( isY ? - 1 : 1 ) * ax . _m2 , ax . _B [ q ] ) ;
@@ -586,13 +589,14 @@ module.exports = function setConvert(ax, fullLayout) {
586589 ax . _B . push ( - ax . _m2 * rl0 ) ;
587590 }
588591
592+ if ( axReverse ) {
593+ ax . _rangebreaks . reverse ( ) ;
594+ }
595+
589596 for ( i = 0 ; i < ax . _rangebreaks . length ; i ++ ) {
590597 brk = ax . _rangebreaks [ i ] ;
591598 ax . _B . push ( ax . _B [ ax . _B . length - 1 ] - ax . _m2 * ( brk . max - brk . min ) * signAx ) ;
592599 }
593- if ( axReverse ) {
594- ax . _B . reverse ( ) ;
595- }
596600
597601 // fill pixel (i.e. 'p') min/max here,
598602 // to not have to loop through the _rangebreaks twice during `p2l`
0 commit comments