@@ -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