Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 39ba96b

Browse files
committed
Add framework for un-converting units
1 parent 59762d4 commit 39ba96b

File tree

3 files changed

+41
-7
lines changed

3 files changed

+41
-7
lines changed

lib/matplotlib/axis.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1576,6 +1576,16 @@ def convert_units(self, x):
15761576
f'units: {x!r}') from e
15771577
return ret
15781578

1579+
@property
1580+
def _can_unconvert_units(self):
1581+
if self.converter is not None:
1582+
if hasattr(self.converter, 'un_convert'):
1583+
return True
1584+
return False
1585+
1586+
def unconvert_units(self, x):
1587+
return self.converter.un_convert(x, self.units, self)
1588+
15791589
def set_units(self, u):
15801590
"""
15811591
Set the units for axis.

lib/matplotlib/dates.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1873,15 +1873,13 @@ def weeks(w):
18731873
return w * DAYS_PER_WEEK
18741874

18751875

1876-
class DateConverter(units.ConversionInterface):
1876+
class BaseDateConverter(units.ConversionInterface):
18771877
"""
1878-
Converter for datetime.date and datetime.datetime data,
1879-
or for date/time data represented as it would be converted
1880-
by :func:`date2num`.
1878+
A base converter for datetime.date and datetime.datetime data, or for
1879+
date/time data represented as it would be converted by :func:`date2num`.
18811880
18821881
The 'unit' tag for such data is None or a tzinfo instance.
18831882
"""
1884-
18851883
@staticmethod
18861884
def axisinfo(unit, axis):
18871885
"""
@@ -1930,6 +1928,24 @@ def default_units(x, axis):
19301928
return None
19311929

19321930

1931+
class DateConverter(BaseDateConverter):
1932+
@staticmethod
1933+
def un_convert(value, unit, axis):
1934+
return num2date(value)
1935+
1936+
1937+
class Datetime64Converter(BaseDateConverter):
1938+
@staticmethod
1939+
def un_convert(value, unit, axis):
1940+
return np.datetime64(num2date(value).replace(tzinfo=None))
1941+
1942+
1943+
class DatetimeConverter(BaseDateConverter):
1944+
@staticmethod
1945+
def un_convert(value, unit, axis):
1946+
return num2date(value)
1947+
1948+
19331949
class ConciseDateConverter(DateConverter):
19341950
"""
19351951
Converter for datetime.date and datetime.datetime data,
@@ -1968,6 +1984,6 @@ def axisinfo(self, unit, axis):
19681984
default_limits=(datemin, datemax))
19691985

19701986

1971-
units.registry[np.datetime64] = DateConverter()
1987+
units.registry[np.datetime64] = Datetime64Converter()
19721988
units.registry[datetime.date] = DateConverter()
1973-
units.registry[datetime.datetime] = DateConverter()
1989+
units.registry[datetime.datetime] = DatetimeConverter()

lib/matplotlib/units.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,14 @@ def convert(obj, unit, axis):
137137
"""
138138
return obj
139139

140+
@staticmethod
141+
def un_convert(data, unit, axis):
142+
"""
143+
Convert data that has already been converted back to its original
144+
value.
145+
"""
146+
return data
147+
140148
@staticmethod
141149
def is_numlike(x):
142150
"""

0 commit comments

Comments
 (0)