todos
[PyX/mjg.git] / design / graph.txt
blob8f1c2ceaa88a9bd75219211e42dbfc1ca79a22fa
1 Structure of modules and classes in the graph subdirectory
3 TODO: - separate all interface definitions from implemenations (and finish all interface definitions)
4       - remove __implements__; its confuses most source code readers
5       - description of data.py is not complete below
8 graph/axis/tick.py
10     rational [a very basic and limited rational number type]
11     tick(rational) [tick position based on a rational number (includes interface definition)]
13     (contains two helper functions to build and handle a list of ticks: mergeticklists and maxlevels)
16 graph/axis/parter.py
18     _Iparter [interface definition]
20     linear [parter for linear axes]
21     autolinear [automatic parter for linear axes (default parter for linear axes)]
23     preexp [helper class for defining tick positions on a logarithmic scale]
25     logarithmic(linparter) [parter for logarithmic axes]
26     autologarithmic(logparter) [automatic parter for logarithmix axes (default parter for logarithmic axes)]
28     shortcuts: - lin = linear
29                - autolin = autolinear
30                - log = logarithmic
31                - autolog = autologarithmic
34 graph/axis/texter.py
36     _Itexter [interface definition]
38     rational [implements _Itexter to create rational number labels]
39     decimal [implements _Itexter to create decimal labels]
40     exponential [implements _Itexter to create exponentential labels]
41     default [implements _Itexter by mixing decimal and exponential texter (default texter for regular axes)]
44 graph/axis/painter.py
46     _Iaxispainter [interface definition]
47     _Iaxispos [interface definition]
49     axiscanvas(canvas.canvas) [canvas to draw axis on (includes interface definition)]
50     rotatetext [class to calculate rotation operation for a given tick direction (includes interface definition)]
52     _axispos [partially implements _Iaxispos interface]
53     pathaxispos(_axispos) [implements _Iaxispos for an arbitrary path]
55     _title [implements _Iaxis (shared task of plotting axis titles in derived axispainters)]
57     geometricseries(attr.changeattr) [a changeable attribute resulting in a geometric series]
58     ticklength(geometricseries) [geometric series for tick lengths]
60     plain(_title) [default axis painter for regular axes (linaxis, logaxis)]
61     linked(plain) [default axis painter for linked regular axes (turns off some features)]
63     subaxispos [implements _Iaxispos for subaxes, which occure in split axes and bar axes)]
65     split(_title) [default axis painter for split axes]
66     omitsubaxispainter [helper class for linksplitaxis argument handling]
67     linkedsplit(split) [default axis painter for linked split axes]
69     bar(_title) [default axis painter for bar axes]
70     linkedbar(bar) [default axis painter for linked bar axes]
73 graph/axis/rater.py
75     cuberater [rater for values like the number of ticks etc. (includes interface definition)]
77     distancerater [rater for optimal distances of boxes (includes interface definition)]
79     rater [rater for ticks and axis layout (includes interface definition)]
81     linear [rater with predefined constructor arguments suitable for a linear axis]
83     logarithmic [rater with predefined constructor arguments suitable for a logarithmic axis]
85     shortcuts: - lin = linear
86                - log = logarithmic
89 graph/axis/axis.py
91     _Imap [interface definition]
92     _Iaxis [interface definition]
94     _linmap [implements _Imap for a linear axis]
95     _logmap [implements _Imap for a logarithmic axis]
97     _axis [partitionally implements _Iaxis; _Imap is missing to fully implement _Iaxis]
99     linear(_axis, _linmap) [implements _Iaxis for a linear axis]
100     logarithmic(_axis, _linmap) [implements _Iaxis for a logarithmic axis]
102     _linked [implements _Iaxis by linking to a regular axis instance, but not taking into account an axis divisor]
103     linked [implements _Iaxis by linking to a regular]
105     split [implements _Iaxis for a splitable axis]
106     linkedsplit(_linked) [implements _Iaxis by linking to a splitaxis instance]
108     bar [implements _Iaxis for a bar axis]
109     linkedbar(_linked) [implements _Iaxis by linking to a baraxis instance]
111     (helper function pathaxis to draw a axis at an arbitrary path)
113     shortcuts: - lin = linear
114                - log = logarithmic
115                - pyx.graph.axis.linear = pyx.graph.axis.axis.linear
116                - pyx.graph.axis.lin = pyx.graph.axis.axis.lin
117                - pyx.graph.axis.logarithmic = pyx.graph.axis.axis.logarithmic
118                - pyx.graph.axis.log = pyx.graph.axis.axis.log
119                - pyx.graph.axis.linked = pyx.graph.axis.axis.linked
120                - pyx.graph.axis.split = pyx.graph.axis.axis.split
121                - pyx.graph.axis.linkedsplit = pyx.graph.axis.axis.linkedsplit
122                - pyx.graph.axis.bar = pyx.graph.axis.axis.bar
123                - pyx.graph.axis.linkedbar = pyx.graph.axis.axis.linkedbar
124                - pyx.graph.axis.pathaxis = pyx.graph.axis.axis.pathaxis
127 key.py
129     [interface definition missing]
131     class key [graph key painter]
134 style.py
136     [interface definition missing]
138     _style [collection of common operations performed by styles]
140     symbolline(_style) [style for drawing symbols with errorbars and lines]
141     line(symbolline) [reduction of symbollines to lines only]
142     symbol(symbolline) [reduction of symbollines to symbols with errorbars only]
143     text(symbol) [extend symbol style to show given text at the symbols]
144     arrow(_style) [draw arrows with given size and direction]
145     rect(_style) [draw rectangles with given color]
146     bar(_style) [draw bars in a bar graph]
149 data.py
151     [interface definition missing]
153     list [data from a list]
154     data [data from another data instance]
155     file [data from a file]
156     function [data from a function]
157     paramfunction [data from a parametric function]
160 graph.py
162     [interface definition missing -- we don't really have interfaces here, but we may introduce some generic
163     behaviour of all graphs (domethods, access to axes and positions, etc.)]
165     lineaxispos [implements _Iaxispos for a straight line]
166     lineaxisposlinegrid(lineaxispos) [like _Iaxispos but adds grid lines for a x-y-graph]
167     graphxy(canvas.canvas) [x-y-graph]
169     shortcuts: - pyx.graph.graphxy = pyx.graph.graph.graphxy
172 timeaxis.py (experimental code, needs python 2.3)
174     _timemap [implements _Imap for datetime instances]
175     timetick(datetime.datetime) [tick position based on datetime]
176     timetexter [implements _Itexter as a primitiv texter for datetime instances]
177     timeaxis(axis._axis, _timemap) [implements _Iaxis for a time axis]
179 NOTE: The timeaxis should be kept as separately as possible. It needs Python 2.3 and dateutils
180       (dateutils is not yet needed while we currently also lack (auto-)partitioning of a timeaxis;
181       there is an ongoing discussion with Gustavo Niemeyer about some patches).