parter and rater have been moved to linear -> adjust base class for timeaxis
[PyX.git] / pyx / graph / axis / timeaxis.py
blob4b036fc21c474a3acba51382e40f9989aac98c74
1 import datetime
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)
8 """
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)
17 self.parter = parter
18 self.rater = rater
20 def convert(self, data, x):
21 # XXX float division of timedelta instances
22 def mstimedelta(td):
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
28 # future
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
39 self.label = label
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
49 class timetexter:
51 def __init__(self, format="%c"):
52 self.format = format
54 def labels(self, ticks):
55 for tick in ticks:
56 if tick.labellevel is not None and tick.label is None:
57 tick.label = tick.strftime(self.format)