8000 add converters · matplotlib/matplotlib@dd88c1c · GitHub
[go: up one dir, main page]

Skip to content

Commit dd88c1c

Browse files
committed
add converters
1 parent cf60835 commit dd88c1c

File tree

1 file changed

+88
-9
lines changed

1 file changed

+88
-9
lines changed

lib/matplotlib/dates.py

Lines changed: 88 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1804,20 +1804,62 @@ def axisinfo(self, unit, axis):
18041804
default_limits=(datemin, datemax))
18051805

18061806

1807-
class _SwitchableDateConverter:
1807+
class TimedeltaConverter(units.ConversionInterface):
18081808
"""
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.
18121814
"""
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+
18131858

1859+
class _SwitchableConverter:
18141860
@staticmethod
18151861
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
18211863

18221864
def axisinfo(self, *args, **kwargs):
18231865
return self._get_converter().axisinfo(*args, **kwargs)
@@ -1829,7 +1871,44 @@ def convert(self, *args, **kwargs):
18291871
return self._get_converter().convert(*args, **kwargs)
18301872

18311873

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+
18321890
units.registry[np.datetime64] = \
18331891
units.registry[datetime.date] = \
18341892
units.registry[datetime.datetime] = \
18351893
_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

Comments
 (0)
0