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

Skip to content

Commit 179c28e

Browse files
committed
ENH added offset to NewDateFormatter; some minor fixes
1 parent a40d3b2 commit 179c28e

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

lib/matplotlib/dates.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,8 @@ class NewDateFormatter(ticker.Formatter):
780780
781781
"""
782782

783-
def __init__(self, locator, tz=None, defaultfmt='%Y-%h-%d %H:%M:%S'):
783+
def __init__(self, locator, tz=None, defaultfmt='%Y-%h-%d %H:%M:%S',
784+
show_offset=True):
784785
"""
785786
Autoformat the date labels. The default format is used to form an
786787
initial string, and then redundant elements are removed.
@@ -797,21 +798,24 @@ def __init__(self, locator, tz=None, defaultfmt='%Y-%h-%d %H:%M:%S'):
797798
self._hourfmt = '%H'
798799
self._minutefmt = '%M'
799800
self._secondfmt = '%S'
801+
self.offset_string = 'Dates!'
802+
self.show_offset = show_offset
800803

801804
def __call__(self, x, pos=None):
802805
locator_unit_scale = float(self._locator._get_unit())
803806
dmin, dmax = self._locator.viewlim_to_dt()
807+
804808
ticks = self._locator.tick_values(dmin, dmax)
805809
if pos is not None:
806810
if not np.array_equal(ticks, self._oldticks):
807811

812+
offset_fmt = ''
808813
fmt = self.defaultfmt
809814
self._formatter = DateFormatter(fmt, self._tz)
810815
tickdate = []
811816

812817
for nn, tick in enumerate(ticks):
813818
tickdate += [num2date(tick)]
814-
print(tickdate)
815819
yearfmt = [self._yearfmt] * len(tickdate)
816820
monthfmt = [self._monthfmt] * len(tickdate)
817821
dayfmt = [self._dayfmt] * len(tickdate)
@@ -825,6 +829,8 @@ def __call__(self, x, pos=None):
825829
yearfmt[nn] = ''
826830
else:
827831
diffed = True
832+
if not diffed:
833+
offset_fmt += yearfmt[0]
828834
if not diffed or tickdate[0].month != 1:
829835
yearfmt[0] = ''
830836

@@ -837,6 +843,9 @@ def __call__(self, x, pos=None):
837843
monthfmt[nn] = ''
838844
else:
839845
diffed = True
846+
if not diffed:
847+
offset_fmt += '-' + monthfmt[0]
848+
monthfmt[0] = ''
840849
if tickdate[0].day != 1:
841850
monthfmt[0] = ''
842851
else:
@@ -856,12 +865,16 @@ def __call__(self, x, pos=None):
856865
dayfmt[nn] = ''
857866
else:
858867
diffed = True
868+
if not diffed:
869+
offset_fmt += '-' + dayfmt[0]
859870
if not diffed or tickdate[0].hour != 0:
860871
dayfmt[0] = ''
861872
else:
862873
for nn in range(0, len(tickdate)):
863874
if tickdate[nn].day == 1:
864875
dayfmt[nn] = ''
876+
if (tickdate[nn].day == tickdate[nn-1].day):
877+
dayfmt[nn] = ''
865878

866879
# remove extra seconds if all zero:
867880
remove = True
@@ -896,6 +909,8 @@ def __call__(self, x, pos=None):
896909
fmt += dayfmt[nn]
897910
if not hourfmt[nn] == '':
898911
fmt += ' '
912+
elif not monthfmt[nn] == '':
913+
fmt += ' '
899914
if not hourfmt[nn] == '':
900915
fmt += hourfmt[nn]
901916
if not secondfmt[nn] == '':
@@ -907,11 +922,16 @@ def __call__(self, x, pos=None):
907922
result = ticknew[pos]
908923
self._oldticks = ticks
909924
self._oldlabels = ticknew
925+
if self.show_offset:
926+
self.offset_string = tickdate[-1].strftime(offset_fmt)
910927
result = self._oldlabels[pos]
911928
else:
912929
result = self._formatter(x, pos)
913930
return result
914931

932+
def get_offset(self):
933+
return self.offset_string
934+
915935

916936
class AutoDateFormatter(ticker.Formatter):
917937
"""

0 commit comments

Comments
 (0)