@@ -1831,17 +1831,41 @@ def view_limits(self, vmin, vmax):
1831
1831
1832
1832
class MultipleLocator (Locator ):
1833
1833
"""
1834
- Set a tick on each integer multiple of the *base* within the view
1835
- interval.
1834
+ Set a tick on each integer multiple of the *base* plus an *offset* within
1835
+ the view interval.
1836
1836
"""
1837
1837
1838
- def __init__ (self , base = 1.0 ):
1838
+ def __init__ (self , base = 1.0 , offset = 0.0 ):
1839
+ """
1840
+ Parameters
1841
+ ----------
1842
+ base : float > 0
1843
+ Interval between ticks.
1844
+ offset : float
1845
+ Value added to each multiple of *base*.
1846
+
1847
+ .. versionadded:: 3.8
1848
+ """
1839
1849
self ._edge = _Edge_integer (base , 0 )
1850
+ self ._offset = offset
1840
1851
1841
- def set_params (self , base ):
1842
- """Set parameters within this locator."""
1852
+ def set_params (self , base = None , offset = None ):
1853
+ """
1854
+ Set parameters within this locator.
1855
+
1856
+ Parameters
1857
+ ----------
1858
+ base : float > 0
1859
+ Interval between ticks.
1860
+ offset : float
1861
+ Value added to each multiple of *base*.
1862
+
1863
+ .. versionadded:: 3.8
1864
+ """
1843
1865
if base is not None :
1844
1866
self ._edge = _Edge_integer (base , 0 )
1867
+ if offset is not None :
1868
+ self ._offset = offset
1845
1869
1846
1870
def __call__ (self ):
1847
1871
"""Return the locations of the ticks."""
@@ -1852,19 +1876,20 @@ def tick_values(self, vmin, vmax):
1852
1876
if vmax < vmin :
1853
1877
vmin , vmax = vmax , vmin
1854
1878
step = self ._edge .step
1879
+ vmin -= self ._offset
1880
+ vmax -= self ._offset
1855
1881
vmin = self ._edge .ge (vmin ) * step
1856
1882
n = (vmax - vmin + 0.001 * step ) // step
1857
- locs = vmin - step + np .arange (n + 3 ) * step
1883
+ locs = vmin - step + np .arange (n + 3 ) * step + self . _offset
1858
1884
return self .raise_if_exceeds (locs )
1859
1885
1860
1886
def view_limits (self , dmin , dmax ):
1861
1887
"""
1862
- Set the view limits to the nearest multiples of *base* that
1863
- contain the data.
1888
+ Set the view limits to the nearest tick values that contain the data.
1864
1889
"""
1865
1890
if mpl .rcParams ['axes.autolimit_mode' ] == 'round_numbers' :
1866
- vmin = self ._edge .le (dmin ) * self ._edge .step
1867
- vmax = self ._edge .ge (dmax ) * self ._edge .step
1891
+ vmin = self ._edge .le (dmin - self . _offset ) * self ._edge .step + self . _offset
1892
+ vmax = self ._edge .ge (dmax - self . _offset ) * self ._edge .step + self . _offset
1868
1893
if vmin == vmax :
1869
1894
vmin -= 1
1870
1895
vmax += 1
0 commit comments