169
169
long = int
170
170
171
171
172
+ # Work around numpy/numpy#6127.
173
+ def divmod (x , y ):
174
+ if isinstance (x , np .generic ):
175
+ x = x .item ()
176
+ if isinstance (y , np .generic ):
177
+ y = y .item ()
178
+ return six .moves .builtins .divmod (x , y )
179
+
180
+
172
181
def _mathdefault (s ):
173
182
"""
174
183
For backward compatibility, in classic mode we display
@@ -1324,7 +1333,7 @@ def view_limits(self, dmin, dmax):
1324
1333
1325
1334
1326
1335
def scale_range (vmin , vmax , n = 1 , threshold = 100 ):
1327
- dv = abs (vmax - vmin ) # > 0 as nonsingular is called before.
1336
+ dv = abs (vmax - vmin ) # > 0 as nonsingular is called before.
1328
1337
meanv = (vmax + vmin ) / 2
1329
1338
offset = (math .copysign (10 ** (math .log10 (abs (meanv )) // 1 ), meanv )
1330
1339
if abs (meanv ) / dv >= threshold
@@ -1415,7 +1424,7 @@ def set_params(self, **kwargs):
1415
1424
if self ._integer :
1416
1425
self ._steps = [n for n in self ._steps if divmod (n , 1 )[1 ] < 0.001 ]
1417
1426
1418
- def bin_boundaries (self , vmin , vmax ):
1427
+ def _raw_ticks (self , vmin , vmax ):
1419
1428
nbins = self ._nbins
1420
1429
if nbins == 'auto' :
1421
1430
nbins = self .axis .get_tick_space ()
@@ -1438,18 +1447,19 @@ def bin_boundaries(self, vmin, vmax):
1438
1447
if best_vmax >= vmax :
1439
1448
break
1440
1449
1441
- bounds = np .arange (nbins + 1 ) * step + best_vmin
1442
- bounds = bounds [(bounds >= vmin ) & (bounds <= vmax )]
1443
- return bounds + offset
1450
+ bounds = np .arange (nbins + 1 ) * step
1451
+ return (bounds [(bounds >= Base (step ).le (vmin - best_vmin )) &
1452
+ (bounds <= Base (step ).ge (vmax - best_vmin ))] +
1453
+ best_vmin + offset )
1444
1454
1445
1455
def __call__ (self ):
1446
1456
vmin , vmax = self .axis .get_view_interval ()
1447
1457
return self .tick_values (vmin , vmax )
1448
1458
1449
1459
def tick_values (self , vmin , vmax ):
1450
- vmin , vmax = mtransforms .nonsingular (vmin , vmax , expander = 1e-13 ,
1451
- tiny = 1e-14 )
1452
- locs = self .bin_boundaries (vmin , vmax )
1460
+ vmin , vmax = mtransforms .nonsingular (
1461
+ vmin , vmax , expander = 1e-13 , tiny = 1e-14 )
1462
+ locs = self ._raw_ticks (vmin , vmax )
1453
1463
prune = self ._prune
1454
1464
if prune == 'lower' :
1455
1465
locs = locs [1 :]
@@ -1466,11 +1476,17 @@ def view_limits(self, dmin, dmax):
1466
1476
dmin = - maxabs
1467
1477
dmax = maxabs
1468
1478
1469
- dmin , dmax = mtransforms .nonsingular (dmin , dmax , expander = 1e-12 ,
1470
- tiny = 1.e -13 )
1479
+ dmin , dmax = mtransforms .nonsingular (
1480
+ dmin , dmax , expander = 1e-12 , tiny = 1e -13 )
1471
1481
1472
1482
if rcParams ['axes.autolimit_mode' ] == 'round_numbers' :
1473
- return np .take (self .bin_boundaries (dmin , dmax ), [0 , - 1 ])
1483
+ locs = self ._raw_ticks (dmin , dmax )
1484
+ step = locs [1 ] - locs [0 ]
1485
+ low = (locs [0 ] if locs [0 ] < dmin or closeto (locs [0 ], dmin )
1486
+ else locs [0 ] - step )
1487
+ high = (locs [- 1 ] if locs [- 1 ] > dmax or closeto (locs [- 1 ], dmax )
1488
+ else locs [- 1 ] + step )
1489
+ return low , high
1474
1490
else :
1475
1491
return dmin , dmax
1476
1492
0 commit comments