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

Skip to content

Commit 34892a2

Browse files
committed
ENH: add seconds and microseconds
1 parent 4b4b704 commit 34892a2

File tree

1 file changed

+53
-6
lines changed

1 file changed

+53
-6
lines changed

lib/matplotlib/dates.py

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,7 @@ def __init__(self, locator, tz=None, defaultfmt='%Y-%h-%d %H:%M:%S',
790790
self._hourfmt = '%H'
791791
self._minutefmt = '%M'
792792
self._secondfmt = '%S'
793+
self._microsecondfmt = '%f'
793794
self.offset_string = 'Dates!'
794795
self.show_offset = show_offset
795796

@@ -813,6 +814,7 @@ def __call__(self, x, pos=None):
813814
dayfmt = [self._dayfmt] * len(tickdate)
814815
hourfmt = [self._hourfmt+':'+self._minutefmt] * len(tickdate)
815816
secondfmt = [self._secondfmt] * len(tickdate)
817+
microsecondfmt = [self._microsecondfmt] * len(tickdate)
816818

817819
# start at year....
818820
diffed = False
@@ -876,15 +878,54 @@ def __call__(self, x, pos=None):
876878
if remove:
877879
for nn in range(0, len(tickdate)):
878880
secondfmt[nn] = ''
881+
else:
882+
for nn in range(0, len(tickdate)):
883+
if tickdate[nn].second == 0:
884+
secondfmt[nn] = ''
879885

880-
# remove time if zero:
886+
# remove extra datetime.microsecond if all zero:
887+
maxlen = 0
888+
oldremove = remove
881889
remove = True
882-
for nn in range(0, len(tickdate)):
883-
if (tickdate[nn].hour != 0 or tickdate[nn].minute != 0):
884-
remove = False
890+
if not oldremove:
891+
for nn in range(0, len(tickdate)):
892+
if tickdate[nn].microsecond != 0:
893+
remove = False
894+
fullst = '%d'%tickdate[nn].microsecond
895+
maxlen = max(maxlen, len(fullst.rstrip('0')))
885896
if remove:
886897
for nn in range(0, len(tickdate)):
887-
hourfmt[nn] = ''
898+
microsecondfmt[nn] = ''
899+
900+
# remove time
901+
if not diffed:
902+
diffed = False
903+
for nn in range(1, len(tickdate)):
904+
if (tickdate[nn].hour == tickdate[nn-1].hour
905+
and tickdate[nn].minute ==
906+
tickdate[nn-1].minute):
907+
hourfmt[nn] = ''
908+
else:
909+
diffed = True
910+
if not diffed and tickdate[0].second != 0:
911+
offset_fmt += ' ' + hourfmt[0]
912+
hourfmt[0] = ''
913+
else:
914+
remove = True
915+
for nn in range(0, len(tickdate)):
916+
if (tickdate[nn].hour != 0 or tickdate[nn].minute != 0):
917+
remove = False
918+
if remove:
919+
for nn in range(0, len(tickdate)):
920+
hourfmt[nn] = ''
921+
else:
922+
for nn in range(0, len(tickdate)):
923+
if (tickdate[nn].hour == 0 and
924+
tickdate[nn].minute == 0):
925+
hourfmt[nn] = ''
926+
monthfmt[nn] = self._monthfmt
927+
928+
888929

889930
ticknew = []
890931
for nn in range(len(tickdate)):
@@ -909,7 +950,13 @@ def __call__(self, x, pos=None):
909950
fmt += ':'
910951
if not secondfmt[nn] == '':
911952
fmt += secondfmt[nn]
912-
ticknew += [tickdate[nn].strftime(fmt)]
953+
if not microsecondfmt[nn] == '':
954+
fmt += '.' + microsecondfmt[nn]
955+
956+
newtickla = tickdate[nn].strftime(fmt)
957+
if not microsecondfmt[nn] == '':
958+
newtickla = newtickla[:-(6-maxlen)]
959+
ticknew += [newtickla]
913960

914961
result = ticknew[pos]
915962
self._oldticks = ticks

0 commit comments

Comments
 (0)