@@ -1804,20 +1804,62 @@ def axisinfo(self, unit, axis):
1804
1804
default_limits = (datemin , datemax ))
1805
1805
1806
1806
1807
- class _SwitchableDateConverter :
1807
+ class TimedeltaConverter ( units . ConversionInterface ) :
1808
1808
"""
1809
- Helper converter-like object that generates and dispatches to
1810
- temporary ConciseDateConverter or DateConverter instances based on
1811
- :rc:`date.converter` and :rc:`date.interval_multiples`.
1809
+ Converter for `datetime.timedelta` and `numpy.timedelta64` data,
1810
+ or for date/time data represented as it would be converted by
1811
+ `date2num`.
1812
+
1813
+ The 'unit' tag for such data is None.
1812
1814
"""
1815
+ # TODO: add pass through for potential formatter arguments
1816
+
1817
+ def axisinfo (self , unit , axis ):
1818
+ """
1819
+ Return the `~matplotlib.units.AxisInfo` for *unit*.
1820
+
1821
+ The *unit* argument is required but not used. It should be `None`.
1822
+ The *axis* argument is required but not used.
1823
+ """
1824
+ majloc = AutoTimedeltaLocator ()
1825
+ majfmt = AutoTimedeltaFormatter (majloc )
1826
+ tdmin = datetime .timedelta (days = 0 )
1827
+ tdmax = datetime .timedelta (days = 10 )
1828
+
1829
+ return units .AxisInfo (majloc = majloc , majfmt = majfmt , label = '' ,
1830
+ default_limits = (tdmin , tdmax ))
1831
+
1832
+ @staticmethod
1833
+ def convert (value , unit , axis ):
1834
+ """
1835
+ If *value* is not already a number or sequence of numbers, convert it
1836
+ with `date2num`.
1837
+
1838
+ The *unit* and *axis* arguments are not used.
1839
+ """
1840
+ return timedelta2num (value )
1841
+
1842
+
1843
+ class ConciseTimedeltaConverter (TimedeltaConverter ):
1844
+ # docstring inherited
1845
+ # TODO: add pass through for potential formatter arguments
1846
+
1847
+ def axisinfo (self , unit , axis):
1848
+ # docstring inherited
1849
+
1850
+ majloc = AutoTimedeltaLocator ()
1851
+ majfmt = ConciseTimedeltaFormatter (majloc )
1852
+ tdmin = datetime .timedelta (days = 0 )
1853
+ tdmax = datetime .timedelta (days = 10 )
1854
+
1855
+ return units .AxisInfo (majloc = majloc , majfmt = majfmt , label = '' ,
1856
+ default_limits = (tdmin , tdmax ))
1857
+
1813
1858
1859
+ class _SwitchableConverter :
1814
1860
@staticmethod
1815
1861
def _get_converter ():
1816
- converter_cls = {
1817
- "concise" : ConciseDateConverter , "auto" : DateConverter }[
1818
- mpl .rcParams ["date.converter" ]]
1819
- interval_multiples = mpl .rcParams ["date.interval_multiples" ]
1820
- return converter_cls (interval_multiples = interval_multiples )
1862
+ return NotImplemented
1821
1863
1822
1864
def axisinfo (self , * args , ** kwargs ):
1823
1865
return self ._get_converter ().axisinfo (* args , ** kwargs )
@@ -1829,7 +1871,44 @@ def convert(self, *args, **kwargs):
1829
1871
return self ._get_converter ().convert (* args , ** kwargs )
1830
1872
1831
1873
1874
+ class _SwitchableDateConverter (_SwitchableConverter ):
1875
+ """
1876
+ Helper converter-like object that generates and dispatches to
1877
+ temporary ConciseDateConverter or DateConverter instances based on
1878
+ :rc:`date.converter` and :rc:`date.interval_multiples`.
1879
+ """
1880
+
1881
+ @staticmethod
1882
+ def _get_converter ():
1883
+ converter_cls = {
1884
+ "concise" : ConciseDateConverter , "auto" : DateConverter }[
1885
+ mpl .rcParams ["date.converter" ]]
1886
+ interval_multiples = mpl .rcParams ["date.interval_multiples" ]
1887
+ return converter_cls (interval_multiples = interval_multiples )
1888
+
1889
+
1832
1890
units .registry [np .datetime64 ] = \
1833
1891
units .registry [datetime .date ] = \
1834
1892
units .registry [datetime .datetime ] = \
1835
1893
_SwitchableDateConverter ()
1894
+
1895
+
1896
+ class _SwitchableTimedeltaConverter (_SwitchableConverter ):
1897
+ """
1898
+ Helper converter-like object that generates and dispatches to
1899
+ temporary ConciseTimedeltaConverter or TimedeltaConverter instances
1900
+ based on :rc:`date.converter`.
1901
+ """
1902
+ # TODO: do we want to add a `timedelta.converter` rcParam?
1903
+
1904
+ @staticmethod
1905
+ def _get_converter ():
1906
+ converter_cls = {
1907
+ "concise" : ConciseTimedeltaConverter , "auto" : TimedeltaConverter }[
1908
+ mpl .rcParams ["date.converter" ]]
1909
+ return converter_cls ()
1910
+
1911
+
1912
+ units .registry [np .timedelta64 ] = \
1913
+ units .registry [datetime .timedelta ] = \
1914
+ _SwitchableTimedeltaConverter ()
0 commit comments