@@ -1619,6 +1619,8 @@ def __init__(self, *args, **kwargs):
1619
1619
will be removed. If prune==None, no ticks will be removed.
1620
1620
1621
1621
"""
1622
+ self ._fine_steps = [1 , 1.5 , 2 , 2.5 , 3 , 4 , 5 , 6 , 8 , 10 ]
1623
+ self ._fine_int_steps = [1 , 2 , 3 , 4 , 5 , 6 , 8 , 10 ]
1622
1624
if args :
1623
1625
kwargs ['nbins' ] = args [0 ]
1624
1626
if len (args ) > 1 :
@@ -1631,8 +1633,11 @@ def set_params(self, **kwargs):
1631
1633
"""Set parameters within this locator."""
1632
1634
if 'nbins' in kwargs :
1633
1635
self ._nbins = kwargs ['nbins' ]
1634
- if self ._nbins != 'auto' :
1635
- self ._nbins = int (self ._nbins )
1636
+ if self ._nbins != 'auto' :
1637
+ self ._nbins = int (self ._nbins )
1638
+ self ._steps2 = None
1639
+ else :
1640
+ self ._steps2 = self ._fine_steps
1636
1641
if 'trim' in kwargs :
1637
1642
warnings .warn (
1638
1643
"The 'trim' keyword has no effect since version 2.0." ,
@@ -1650,7 +1655,8 @@ def set_params(self, **kwargs):
1650
1655
if 'steps' in kwargs :
1651
1656
steps = kwargs ['steps' ]
1652
1657
if steps is None :
1653
- self ._steps = [1 , 1.5 , 2 , 2.5 , 3 , 4 , 5 , 6 , 8 , 10 ]
1658
+ self ._steps = self ._fine_steps
1659
+ self ._steps2 = None
1654
1660
else :
1655
1661
if int (steps [- 1 ]) != 10 :
1656
1662
steps = list (steps )
@@ -1660,11 +1666,15 @@ def set_params(self, **kwargs):
1660
1666
self ._integer = kwargs ['integer' ]
1661
1667
if self ._integer :
1662
1668
self ._steps = [n for n in self ._steps if _divmod (n , 1 )[1 ] < 0.001 ]
1669
+ if self ._steps2 is not None :
1670
+ self ._steps2 = self ._fine_int_steps
1663
1671
1664
- def _raw_ticks (self , vmin , vmax ):
1672
+ def _raw_ticks (self , vmin , vmax , steps = None ):
1673
+ if steps is None :
1674
+ steps = self ._steps
1665
1675
nbins = self ._nbins
1666
1676
if nbins == 'auto' :
1667
- nbins = max (min (self .axis .get_tick_space (), 9 ), 1 )
1677
+ nbins = max (min (self .axis .get_tick_space (), 9 ), 2 )
1668
1678
scale , offset = scale_range (vmin , vmax , nbins )
1669
1679
if self ._integer :
1670
1680
scale = max (1 , scale )
@@ -1675,7 +1685,7 @@ def _raw_ticks(self, vmin, vmax):
1675
1685
best_vmax = vmax
1676
1686
best_vmin = vmin
1677
1687
1678
- for step in self . _steps :
1688
+ for step in steps :
1679
1689
if step < scaled_raw_step :
1680
1690
continue
1681
1691
step *= scale
@@ -1703,7 +1713,14 @@ def tick_values(self, vmin, vmax):
1703
1713
vmin , vmax = mtransforms .nonsingular (
1704
1714
vmin , vmax , expander = 1e-13 , tiny = 1e-14 )
1705
1715
locs = self ._raw_ticks (vmin , vmax )
1716
+ nlocs = len (locs )
1706
1717
prune = self ._prune
1718
+ if prune in ('lower' , 'upper' ):
1719
+ nlocs -= 1
1720
+ elif prune == 'both' :
1721
+ nlocs -= 2
1722
+ if self ._steps2 and nlocs < 2 :
1723
+ locs = self ._raw_ticks (vmin , vmax , self ._steps2 )
1707
1724
if prune == 'lower' :
1708
1725
locs = locs [1 :]
1709
1726
elif prune == 'upper' :
0 commit comments