@@ -198,21 +198,27 @@ module.exports = function setConvert(ax, fullLayout) {
198
198
if ( ! len ) return _l2p ( v , ax . _m , ax . _b ) ;
199
199
200
200
var isY = axLetter === 'y' ;
201
- var pos = isY ? - v : v ;
201
+ var pos = v ;
202
202
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 ) {
205
211
var nextI = i + 1 ;
206
212
var brk = ax . _rangebreaks [ i ] ;
207
213
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 ;
210
216
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 ;
213
219
else {
214
220
// 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 ;
216
222
break ;
217
223
}
218
224
}
@@ -226,18 +232,15 @@ module.exports = function setConvert(ax, fullLayout) {
226
232
var isY = axLetter === 'y' ;
227
233
var pos = px ;
228
234
229
- var reversed = ax . range [ 0 ] > ax . range [ 1 ] ;
230
- var signAx = reversed ? - 1 : 1 ;
231
-
232
235
var first = 0 ;
233
236
var last = len - 1 ;
234
237
var q = first ;
235
238
for ( var i = first ; i <= last ; i += 1 ) {
236
239
var nextI = i + 1 ;
237
240
var brk = ax . _rangebreaks [ i ] ;
238
241
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 ;
241
244
}
242
245
243
246
return _p2l ( px , ( isY ? - 1 : 1 ) * ax . _m2 , ax . _B [ q ] ) ;
@@ -586,13 +589,14 @@ module.exports = function setConvert(ax, fullLayout) {
586
589
ax . _B . push ( - ax . _m2 * rl0 ) ;
587
590
}
588
591
592
+ if ( axReverse ) {
593
+ ax . _rangebreaks . reverse ( ) ;
594
+ }
595
+
589
596
for ( i = 0 ; i < ax . _rangebreaks . length ; i ++ ) {
590
597
brk = ax . _rangebreaks [ i ] ;
591
598
ax . _B . push ( ax . _B [ ax . _B . length - 1 ] - ax . _m2 * ( brk . max - brk . min ) * signAx ) ;
592
599
}
593
- if ( axReverse ) {
594
- ax . _B . reverse ( ) ;
595
- }
596
600
597
601
// fill pixel (i.e. 'p') min/max here,
598
602
// to not have to loop through the _rangebreaks twice during `p2l`
0 commit comments