2 from pyx
.graph
import style
3 from pyx
.graph
.axis
import axis
, rater
5 """some experimental code for creating a time axis
6 - it needs python 2.3 to be used (it is based on the new datetime data type)
7 - a timeaxis is always based on the datetime data type (there is no distinction between times and dates)
10 class timeaxis(axis
.linear
):
11 "time axis mapping based "
13 # TODO: how to deal with reversed timeaxis?
15 def __init__(self
, parter
=None, rater
=rater
.linear(), **args
):
16 axis
._regularaxis
.__init
__(self
, divisor
=None, **args
)
20 def convert(self
, data
, x
):
21 # XXX float division of timedelta instances
23 "return the timedelta in microseconds"
24 return td
.microseconds
+ 1000000*(td
.seconds
+ 3600*24*td
.days
)
25 return mstimedelta(x
- data
.min) / float(mstimedelta(data
.max - data
.min))
26 # we could store float(mstimedelta(self.dx)) instead of self.dx, but
27 # I prefer a different solution (not based on huge integers) for the
30 zero
= datetime
.timedelta(0)
33 class timetick(datetime
.datetime
):
35 def __init__(self
, year
, month
, day
, ticklevel
=0, labellevel
=0, label
=None, labelattrs
=[], **kwargs
):
36 datetime
.datetime
.__init
__(self
, year
, month
, day
, **kwargs
)
37 self
.ticklevel
= ticklevel
38 self
.labellevel
= labellevel
40 self
.labelattrs
= labelattrs
[:]
42 def merge(self
, other
):
43 if self
.ticklevel
is None or (other
.ticklevel
is not None and other
.ticklevel
< self
.ticklevel
):
44 self
.ticklevel
= other
.ticklevel
45 if self
.labellevel
is None or (other
.labellevel
is not None and other
.labellevel
< self
.labellevel
):
46 self
.labellevel
= other
.labellevel
51 def __init__(self
, format
="%c"):
54 def labels(self
, ticks
):
56 if tick
.labellevel
is not None and tick
.label
is None:
57 tick
.label
= tick
.strftime(self
.format
)