@@ -1834,8 +1834,11 @@ class DateConverter(units.ConversionInterface):
18341834 The 'unit' tag for such data is None or a tzinfo instance.
18351835 """
18361836
1837- @staticmethod
1838- def axisinfo (unit , axis ):
1837+ def __init__ (self , * , interval_multiples = True ):
1838+ self ._interval_multiples = interval_multiples
1839+ super ().__init__ ()
1840+
1841+ def axisinfo (self , unit , axis ):
18391842 """
18401843 Return the `~matplotlib.units.AxisInfo` for *unit*.
18411844
@@ -1844,7 +1847,8 @@ def axisinfo(unit, axis):
18441847 """
18451848 tz = unit
18461849
1847- majloc = AutoDateLocator (tz = tz )
1850+ majloc = AutoDateLocator (tz = tz ,
1851+ interval_multiples = self ._interval_multiples )
18481852 majfmt = AutoDateFormatter (majloc , tz = tz )
18491853 datemin = datetime .date (2000 , 1 , 1 )
18501854 datemax = datetime .date (2010 , 1 , 1 )
@@ -1886,17 +1890,19 @@ class ConciseDateConverter(DateConverter):
18861890 # docstring inherited
18871891
18881892 def __init__ (self , formats = None , zero_formats = None , offset_formats = None ,
1889- show_offset = True ):
1893+ show_offset = True , * , interval_multiples = True ):
18901894 self ._formats = formats
18911895 self ._zero_formats = zero_formats
18921896 self ._offset_formats = offset_formats
18931897 self ._show_offset = show_offset
1898+ self ._interval_multiples = interval_multiples
18941899 super ().__init__ ()
18951900
18961901 def axisinfo (self , unit , axis ):
18971902 # docstring inherited
18981903 tz = unit
1899- majloc = AutoDateLocator (tz = tz )
1904+ majloc = AutoDateLocator (tz = tz ,
1905+ interval_multiples = self ._interval_multiples )
19001906 majfmt = ConciseDateFormatter (majloc , tz = tz , formats = self ._formats ,
19011907 zero_formats = self ._zero_formats ,
19021908 offset_formats = self ._offset_formats ,
@@ -1907,6 +1913,42 @@ def axisinfo(self, unit, axis):
19071913 default_limits = (datemin , datemax ))
19081914
19091915
1910- units .registry [np .datetime64 ] = DateConverter ()
1911- units .registry [datetime .date ] = DateConverter ()
1912- units .registry [datetime .datetime ] = DateConverter ()
1916+ class _rcParam_helper :
1917+ """
1918+ This helper class is so that we can set the converter for dates
1919+ via the validator for the rcParams `date.converter` and
1920+ `date.interval_multiples`. Never instatiated.
1921+ """
1922+
1923+ conv_st = 'auto'
1924+ int_mult = True
1925+
1926+ @classmethod
1927+ def set_converter (cls , s ):
1928+ """Called by validator for rcParams date.converter"""
1929+ cls .conv_st = s
1930+ cls .register_converters ()
1931+
1932+ @classmethod
1933+ def set_int_mult (cls , b ):
1934+ """Called by validator for rcParams date.interval_multiples"""
1935+ cls .int_mult = b
1936+ cls .register_converters ()
1937+
1938+ @classmethod
1939+ def register_converters (cls ):
1940+ """
1941+ Helper to register the date converters when rcParams `date.converter`
1942+ and `date.interval_multiples` are changed. Called by the helpers
1943+ above.
1944+ """
1945+ if cls .conv_st == 'concise' :
1946+ converter = ConciseDateConverter
1947+ else :
1948+ converter = DateConverter
1949+
1950+ interval_multiples = cls .int_mult
1951+ convert = converter (interval_multiples = interval_multiples )
1952+ units .registry [np .datetime64 ] = convert
1953+ units .registry [datetime .date ] = convert
1954+ units .registry [datetime .datetime ] = convert
0 commit comments