Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd99a23c

Browse files
committed
ENH: simplified logic
1 parent2e09c74 commitd99a23c

File tree

1 file changed

+106
-135
lines changed

1 file changed

+106
-135
lines changed

‎lib/matplotlib/dates.py

Lines changed: 106 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -814,163 +814,134 @@ def __call__(self, x, pos=None):
814814
fmt=self.defaultfmt
815815
self._formatter=DateFormatter(fmt,self._tz)
816816
tickdate= []
817-
817+
tickdatetime= []
818818
fornn,tickinenumerate(ticks):
819-
tickdate+= [num2date(tick)]
819+
tickdate+= [num2date(tick).timetuple()]
820+
tickdatetime+= [num2date(tick)]
820821
yearfmt= [self._yearfmt]*len(tickdate)
821822
monthfmt= [self._monthfmt]*len(tickdate)
822823
dayfmt= [self._dayfmt]*len(tickdate)
823824
hourfmt= [self._hourfmt+':'+self._minutefmt]*len(tickdate)
824825
secondfmt= [self._secondfmt]*len(tickdate)
825826
microsecondfmt= [self._microsecondfmt]*len(tickdate)
826827

827-
# start at year....
828+
# try w/ tupples:
829+
# basic algoritthm:
830+
# 1) only display a part of the date if it changes over the
831+
# ticks.
832+
# 2) don't display the smaller part of the date if:
833+
# it is always the same or if it is the start of the
834+
# year, month, day etc.
835+
level=5
828836
diffed=False
829-
fornninrange(1,len(tickdate)):
830-
iftickdate[nn].year==tickdate[nn-1].year:
831-
yearfmt[nn]=''
832-
else:
833-
diffed=True
834-
ifnotdiffed:
835-
offset_fmt+=yearfmt[0]
836-
ifnotdiffedortickdate[0].month!=1:
837-
yearfmt[0]=''
838-
839-
# remove extra months....
840-
ifnotdiffed:
841-
diffed=False
842-
fornninrange(1,len(tickdate)):
843-
if (tickdate[nn].month==tickdate[nn-1].month
844-
andyearfmt[nn]==''):
845-
monthfmt[nn]=''
846-
else:
847-
diffed=True
848-
ifnotdiffed:
849-
offset_fmt+='-'+monthfmt[0]
850-
monthfmt[0]=''
851-
iftickdate[0].day!=1:
852-
monthfmt[0]=''
853-
else:
854-
# we have more than one year, so remove Januarys because
855-
# they are labeled.
856-
fornninrange(0,len(tickdate)):
857-
iftickdate[nn].month==1:
858-
monthfmt[nn]=''
859-
860-
# remove extra days:
861-
ifnotdiffed:
862-
# we are all in one month...
863-
diffed=False
837+
# fmt for most ticks at this level
838+
fmts= [self._yearfmt,self._monthfmt,self._dayfmt,
839+
self._hourfmt+':'+self._minutefmt,
840+
self._hourfmt+':'+self._minutefmt,
841+
self._secondfmt+'.'+self._microsecondfmt,
842+
self._secondfmt+'.'+self._microsecondfmt]
843+
# fmt for zeros ticks at this level. These are
844+
# ticks that should be labeled w/ the level above.
845+
zerofmts= ['',self._yearfmt,self._monthfmt,
846+
self._monthfmt+'-'+self._dayfmt,
847+
self._hourfmt+':'+self._minutefmt,
848+
self._hourfmt+':'+self._minutefmt,
849+
self._secondfmt]
850+
# offset fmt are for the offset in the upper left of the
851+
# or lower right of the axis.
852+
offsetfmts= ['',
853+
self._yearfmt,
854+
self._yearfmt+'-'+self._monthfmt,
855+
self._yearfmt+'-'+self._monthfmt+'-'+ \
856+
self._dayfmt,
857+
self._yearfmt+'-'+self._monthfmt+'-' \
858+
+self._dayfmt,
859+
self._monthfmt+'-'+ \
860+
self._dayfmt+' '+self._hourfmt+ \
861+
':'+self._minutefmt,
862+
self._monthfmt+'-'+ \
863+
self._dayfmt+' '+self._hourfmt+ \
864+
':'+self._minutefmt,]
865+
# zoffset fmt are for the offset if there was a zero in
866+
# the ticks. So this has a bit less info
867+
zoffsetfmts= ['',
868+
self._yearfmt,
869+
self._yearfmt,
870+
self._yearfmt,
871+
self._yearfmt+'-'+self._monthfmt+'-' \
872+
+self._dayfmt,
873+
self._monthfmt+'-'+ \
874+
self._dayfmt+' '+self._hourfmt+ \
875+
':'+self._minutefmt,
876+
self._monthfmt+'-'+ \
877+
self._dayfmt+' '+self._hourfmt+ \
878+
':'+self._minutefmt,]
879+
880+
# detremine the level we will label at:
881+
whilenotdiffedandlevel>=0:
864882
fornninrange(1,len(tickdate)):
865-
if (tickdate[nn].day==tickdate[nn-1].day
866-
andmonthfmt[nn]==''):
867-
dayfmt[nn]=''
883+
iflevel<6:
884+
if (nottickdate[nn-1][level]==
885+
tickdate[nn][level]):
886+
diffed=True
868887
else:
869-
diffed=True
888+
if (tickdate[nn][level]-
889+
tickdate[nn-1][level]>2):
890+
diffed=True
870891
ifnotdiffed:
871-
offset_fmt+='-'+dayfmt[0]
872-
ifnotdiffedortickdate[0].hour!=0:
873-
dayfmt[0]=''
874-
else:
875-
fornninrange(0,len(tickdate)):
876-
iftickdate[nn].day==1:
877-
dayfmt[nn]=''
878-
if (tickdate[nn].day==tickdate[nn-1].day):
879-
dayfmt[nn]=''
880-
881-
# remove extra seconds if all zero:
882-
remove=True
883-
fornninrange(0,len(tickdate)):
884-
iftickdate[nn].second!=0:
885-
remove=False
886-
ifremove:
887-
fornninrange(0,len(tickdate)):
888-
secondfmt[nn]=''
889-
else:
890-
fornninrange(0,len(tickdate)):
891-
iftickdate[nn].second==0:
892-
secondfmt[nn]=''
893-
894-
# remove extra datetime.microsecond if all zero:
895-
maxlen=0
896-
oldremove=remove
897-
remove=True
898-
ifnotoldremove:
899-
fornninrange(0,len(tickdate)):
900-
iftickdate[nn].microsecond!=0:
901-
remove=False
902-
fullst='%d'%tickdate[nn].microsecond
903-
maxlen=max(maxlen,len(fullst.rstrip('0')))
904-
ifremove:
905-
fornninrange(0,len(tickdate)):
906-
microsecondfmt[nn]=''
907-
908-
# remove time
892+
level-=1
909893
ifnotdiffed:
910-
diffed=False
911-
fornninrange(1,len(tickdate)):
912-
if (tickdate[nn].hour==tickdate[nn-1].hour
913-
andtickdate[nn].minute==
914-
tickdate[nn-1].minute):
915-
hourfmt[nn]=''
916-
else:
917-
diffed=True
918-
ifnotdiffedandtickdate[0].second!=0:
919-
offset_fmt+=' '+hourfmt[0]
920-
hourfmt[0]=''
921-
else:
922-
remove=True
923-
fornninrange(0,len(tickdate)):
924-
if (tickdate[nn].hour!=0ortickdate[nn].minute!=0):
925-
remove=False
926-
ifremove:
927-
fornninrange(0,len(tickdate)):
928-
hourfmt[nn]=''
929-
else:
930-
fornninrange(0,len(tickdate)):
931-
if (tickdate[nn].hour==0and
932-
tickdate[nn].minute==0):
933-
hourfmt[nn]=''
934-
monthfmt[nn]=self._monthfmt
935-
936-
894+
level=6
937895

896+
# level is the basic level we will label at.
897+
# now loop through and decide the actual ticklabels
898+
zerovals= [0,1,1,0,0,0,0]
938899
ticknew= []
900+
zeroed=False
939901
fornninrange(len(tickdate)):
940-
fmt=''
941-
ifnotyearfmt[nn]=='':
942-
fmt=yearfmt[nn]
943-
ifnotmonthfmt[nn]=='':
944-
fmt+='-'
945-
ifnotmonthfmt[nn]=='':
946-
fmt+=monthfmt[nn]
947-
ifnotdayfmt[nn]=='':
948-
fmt+='-'
949-
ifnotdayfmt[nn]=='':
950-
fmt+=dayfmt[nn]
951-
ifnothourfmt[nn]=='':
952-
fmt+=' '
953-
elifnotmonthfmt[nn]=='':
954-
fmt+=' '
955-
ifnothourfmt[nn]=='':
956-
fmt+=hourfmt[nn]
957-
ifnotsecondfmt[nn]=='':
958-
fmt+=':'
959-
ifnotsecondfmt[nn]=='':
960-
fmt+=secondfmt[nn]
961-
ifnotmicrosecondfmt[nn]=='':
962-
fmt+='.'+microsecondfmt[nn]
963-
964-
newtickla=tickdate[nn].strftime(fmt)
965-
ifnotmicrosecondfmt[nn]=='':
966-
newtickla=newtickla[:-(6-maxlen)]
902+
iftickdate[nn][level]==zerovals[level]:
903+
fmt=zerofmts[level]
904+
zeroed=True
905+
else:
906+
fmt=fmts[level]
907+
newtickla=tickdatetime[nn].strftime(fmt)
967908
ticknew+= [newtickla]
968909

910+
# special handling of seconds and microseconds:
911+
# strip extra zeros and decimal if possible...
912+
iflevel>=5:
913+
stop=False
914+
ind=8
915+
whilenotstopandind>1:
916+
fornninrange(len(ticknew)):
917+
# ==9 is full ss.mmmmmmm
918+
# format tickstring. Other tickstrings
919+
# are zeros with appropriate info for the
920+
# zero.
921+
if (len(ticknew[nn])==9and
922+
ticknew[nn][ind]!='0'):
923+
stop=True
924+
ind=ind-1
925+
ifind==1:
926+
# strip the decimal as well if we got to here.
927+
ind=0
928+
fornninrange(len(ticknew)):
929+
iflen(ticknew[nn])==9:
930+
ticknew[nn]=ticknew[nn][:ind+2]
931+
969932
result=ticknew[pos]
970933
self._oldticks=ticks
971934
self._oldlabels=ticknew
935+
936+
# set the offset string:
972937
ifself.show_offset:
973-
self.offset_string=tickdate[-1].strftime(offset_fmt)
938+
ifnotzeroed:
939+
self.offset_string=tickdatetime[-1].strftime(
940+
offsetfmts[level])
941+
else:
942+
self.offset_string=tickdatetime[-1].strftime(
943+
zoffsetfmts[level])
944+
974945
result=self._oldlabels[pos]
975946
else:
976947
result=self._formatter(x,pos)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp