Hooke(GUI)
[hooke.git] / lib / curve.py
1 #!/usr/bin/env python\r
2 \r
3 '''\r
4 curve.py\r
5 \r
6 Curve and related classes for Hooke.\r
7 \r
8 Copyright 2010 by Dr. Rolf Schmidt (Concordia University, Canada)\r
9 \r
10 This program is released under the GNU General Public License version 2.\r
11 '''\r
12 \r
13 from  matplotlib.ticker import Formatter\r
14 import lib.prettyformat\r
15 \r
16 class Curve(object):\r
17 \r
18     def __init__(self):\r
19         self.color = 'blue'\r
20         self.decimals = Decimals()\r
21         self.destination = Destination()\r
22         self.label = ''\r
23         self.legend = False\r
24         self.linewidth = 1\r
25         self.prefix = Prefix()\r
26         self.size = 0.5\r
27         self.style = 'plot'\r
28         self.title = ''\r
29         self.units = Units()\r
30         self.visible = True\r
31         self.x = []\r
32         self.y = []\r
33 \r
34 \r
35 class Data(object):\r
36 \r
37     def __init__(self):\r
38         self.x = []\r
39         self.y = []\r
40 \r
41 \r
42 class Decimals(object):\r
43 \r
44     def __init__(self):\r
45         self.x = 2\r
46         self.y = 2\r
47 \r
48 \r
49 class Destination(object):\r
50 \r
51     def __init__(self):\r
52         self.column = 1\r
53         self.row = 1\r
54 \r
55 \r
56 class Prefix(object):\r
57 \r
58     def __init__(self):\r
59         self.x = 'n'\r
60         self.y = 'p'\r
61 \r
62 \r
63 class PrefixFormatter(Formatter):\r
64     '''\r
65     Formatter (matplotlib) class that uses power prefixes.\r
66     '''\r
67     def __init__(self, decimals=2, prefix='n', use_zero=True):\r
68         self.decimals = decimals\r
69         self.prefix = prefix\r
70         self.use_zero = use_zero\r
71 \r
72     def __call__(self, x, pos=None):\r
73         'Return the format for tick val *x* at position *pos*'\r
74         if self.use_zero:\r
75             if x == 0:\r
76                 return '0'\r
77         multiplier = lib.prettyformat.get_exponent(self.prefix)\r
78         decimals_str = '%.' + str(self.decimals) + 'f'\r
79         return decimals_str % (x / (10 ** multiplier))\r
80 \r
81 \r
82 class Units(object):\r
83 \r
84     def __init__(self):\r
85         self.x = ''\r
86         self.y = ''\r