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

Skip to content

Commit 2e09c74

Browse files
committed
ENH: add seconds and microseconds
1 parent 179c28e commit 2e09c74

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
@@ -798,6 +798,7 @@ def __init__(self, locator, tz=None, defaultfmt='%Y-%h-%d %H:%M:%S',
798798
self._hourfmt = '%H'
799799
self._minutefmt = '%M'
800800
self._secondfmt = '%S'
801+
self._microsecondfmt = '%f'
801802
self.offset_string = 'Dates!'
802803
self.show_offset = show_offset
803804

@@ -821,6 +822,7 @@ def __call__(self, x, pos=None):
821822
dayfmt = [self._dayfmt] * len(tickdate)
822823
hourfmt = [self._hourfmt+':'+self._minutefmt] * len(tickdate)
823824
secondfmt = [self._secondfmt] * len(tickdate)
825+
microsecondfmt = [self._microsecondfmt] * len(tickdate)
824826

825827
# start at year....
826828
diffed = False
@@ -884,15 +886,54 @@ def __call__(self, x, pos=None):
884886
if remove:
885887
for nn in range(0, len(tickdate)):
886888
secondfmt[nn] = ''
889+
else:
890+
for nn in range(0, len(tickdate)):
891+
if tickdate[nn].second == 0:
892+
secondfmt[nn] = ''
887893

888-
# remove time if zero:
894+
# remove extra datetime.microsecond if all zero:
895+
maxlen = 0
896+
oldremove = remove
889897
remove = True
890-
for nn in range(0, len(tickdate)):
891-
if (tickdate[nn].hour != 0 or tickdate[nn].minute != 0):
892-
remove = False
898+
if not oldremove:
899+
for nn in range(0, len(tickdate)):
900+
if tickdate[nn].microsecond != 0:
901+
remove = False
902+
fullst = '%d'%tickdate[nn].microsecond
903+
maxlen = max(maxlen, len(fullst.rstrip('0')))
893904
if remove:
894905
for nn in range(0, len(tickdate)):
895-
hourfmt[nn] = ''
906+
microsecondfmt[nn] = ''
907+
908+
# remove time
909+
if not diffed:
910+
diffed = False
911+
for nn in range(1, len(tickdate)):
912+
if (tickdate[nn].hour == tickdate[nn-1].hour
913+
and tickdate[nn].minute ==
914+
tickdate[nn-1].minute):
915+
hourfmt[nn] = ''
916+
else:
917+
diffed = True
918+
if not diffed and tickdate[0].second != 0:
919+
offset_fmt += ' ' + hourfmt[0]
920+
hourfmt[0] = ''
921+
else:
922+
remove = True
923+
for nn in range(0, len(tickdate)):
924+
if (tickdate[nn].hour != 0 or tickdate[nn].minute != 0):
925+
remove = False
926+
if remove:
927+
for nn in range(0, len(tickdate)):
928+
hourfmt[nn] = ''
929+
else:
930+
for nn in range(0, len(tickdate)):
931+
if (tickdate[nn].hour == 0 and
932+
tickdate[nn].minute == 0):
933+
hourfmt[nn] = ''
934+
monthfmt[nn] = self._monthfmt
935+
936+
896937

897938
ticknew = []
898939
for nn in range(len(tickdate)):
@@ -917,7 +958,13 @@ def __call__(self, x, pos=None):
917958
fmt += ':'
918959
if not secondfmt[nn] == '':
919960
fmt += secondfmt[nn]
920-
ticknew += [tickdate[nn].strftime(fmt)]
961+
if not microsecondfmt[nn] == '':
962+
fmt += '.' + microsecondfmt[nn]
963+
964+
newtickla = tickdate[nn].strftime(fmt)
965+
if not microsecondfmt[nn] == '':
966+
newtickla = newtickla[:-(6-maxlen)]
967+
ticknew += [newtickla]
921968

922969
result = ticknew[pos]
923970
self._oldticks = ticks

0 commit comments

Comments
 (0)