@@ -780,7 +780,8 @@ class NewDateFormatter(ticker.Formatter):
780
780
781
781
"""
782
782
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 ):
784
785
"""
785
786
Autoformat the date labels. The default format is used to form an
786
787
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'):
797
798
self ._hourfmt = '%H'
798
799
self ._minutefmt = '%M'
799
800
self ._secondfmt = '%S'
801
+ self .offset_string = 'Dates!'
802
+ self .show_offset = show_offset
800
803
801
804
def __call__ (self , x , pos = None ):
802
805
locator_unit_scale = float (self ._locator ._get_unit ())
803
806
dmin , dmax = self ._locator .viewlim_to_dt ()
807
+
804
808
ticks = self ._locator .tick_values (dmin , dmax )
805
809
if pos is not None :
806
810
if not np .array_equal (ticks , self ._oldticks ):
807
811
812
+ offset_fmt = ''
808
813
fmt = self .defaultfmt
809
814
self ._formatter = DateFormatter (fmt , self ._tz )
810
815
tickdate = []
811
816
812
817
for nn , tick in enumerate (ticks ):
813
818
tickdate += [num2date (tick )]
814
- print (tickdate )
815
819
yearfmt = [self ._yearfmt ] * len (tickdate )
816
820
monthfmt = [self ._monthfmt ] * len (tickdate )
817
821
dayfmt = [self ._dayfmt ] * len (tickdate )
@@ -825,6 +829,8 @@ def __call__(self, x, pos=None):
825
829
yearfmt [nn ] = ''
826
830
else :
827
831
diffed = True
832
+ if not diffed :
833
+ offset_fmt += yearfmt [0 ]
828
834
if not diffed or tickdate [0 ].month != 1 :
829
835
yearfmt [0 ] = ''
830
836
@@ -837,6 +843,9 @@ def __call__(self, x, pos=None):
837
843
monthfmt [nn ] = ''
838
844
else :
839
845
diffed = True
846
+ if not diffed :
847
+ offset_fmt += '-' + monthfmt [0 ]
848
+ monthfmt [0 ] = ''
840
849
if tickdate [0 ].day != 1 :
841
850
monthfmt [0 ] = ''
842
851
else :
@@ -856,12 +865,16 @@ def __call__(self, x, pos=None):
856
865
dayfmt [nn ] = ''
857
866
else :
858
867
diffed = True
868
+ if not diffed :
869
+ offset_fmt += '-' + dayfmt [0 ]
859
870
if not diffed or tickdate [0 ].hour != 0 :
860
871
dayfmt [0 ] = ''
861
872
else :
862
873
for nn in range (0 , len (tickdate )):
863
874
if tickdate [nn ].day == 1 :
864
875
dayfmt [nn ] = ''
876
+ if (tickdate [nn ].day == tickdate [nn - 1 ].day ):
877
+ dayfmt [nn ] = ''
865
878
866
879
# remove extra seconds if all zero:
867
880
remove = True
@@ -896,6 +909,8 @@ def __call__(self, x, pos=None):
896
909
fmt += dayfmt [nn ]
897
910
if not hourfmt [nn ] == '' :
898
911
fmt += ' '
912
+ elif not monthfmt [nn ] == '' :
913
+ fmt += ' '
899
914
if not hourfmt [nn ] == '' :
900
915
fmt += hourfmt [nn ]
901
916
if not secondfmt [nn ] == '' :
@@ -907,11 +922,16 @@ def __call__(self, x, pos=None):
907
922
result = ticknew [pos ]
908
923
self ._oldticks = ticks
909
924
self ._oldlabels = ticknew
925
+ if self .show_offset :
926
+ self .offset_string = tickdate [- 1 ].strftime (offset_fmt )
910
927
result = self ._oldlabels [pos ]
911
928
else :
912
929
result = self ._formatter (x , pos )
913
930
return result
914
931
932
+ def get_offset (self ):
933
+ return self .offset_string
934
+
915
935
916
936
class AutoDateFormatter (ticker .Formatter ):
917
937
"""
0 commit comments