/+junk/pygooglechart-py3k

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/%2Bjunk/pygooglechart-py3k
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
1
#!/usr/bin/env python
55 by gak
- Fixed line endings to UNIX
2
"""
3
Copyright Gerald Kaszuba 2008
4
5
This program is free software: you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9
10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU General Public License for more details.
14
15
You should have received a copy of the GNU General Public License
16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
"""
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
18
19
import os
20
import sys
21
import math
22
23
ROOT = os.path.dirname(os.path.abspath(__file__))
24
sys.path.insert(0, os.path.join(ROOT, '..'))
25
46 by gak
- Added stripes and grid line chart to examples
26
from pygooglechart import Chart
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
27
from pygooglechart import SimpleLineChart
28
from pygooglechart import XYLineChart
22 by gak
- pygooglechart.py converted to unix line breaks
29
from pygooglechart import SparkLineChart
45 by gak
- Added filled line graph to examples
30
from pygooglechart import Axis
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
31
32
import settings
33
import helper
34
35
def simple_random():
19 by gak
Added automatic scaling patch from Trent Mick
36
    chart = SimpleLineChart(settings.width, settings.height, y_range=(0, 100))
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
37
    chart.add_data(helper.random_data())
38
    chart.download('line-simple-random.png')
39
40
def xy_random():
22 by gak
- pygooglechart.py converted to unix line breaks
41
    chart = XYLineChart(settings.width, settings.height,
19 by gak
Added automatic scaling patch from Trent Mick
42
                        x_range=(0, 100), y_range=(0, 100))
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
43
    chart.add_data(helper.random_data())
44
    chart.add_data(helper.random_data())
45
    chart.download('line-xy-random.png')
46
47
def xy_rect():
19 by gak
Added automatic scaling patch from Trent Mick
48
    chart = XYLineChart(settings.width, settings.height,
49
                        x_range=(0, 100), y_range=(0, 100))
15 by gak
Added more examples
50
    chart.add_data([10, 90, 90, 10, 10])
51
    chart.add_data([10, 10, 90, 90, 10])
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
52
    chart.download('line-xy-rect.png')
53
54
def xy_circle():
19 by gak
Added automatic scaling patch from Trent Mick
55
    chart = XYLineChart(settings.width, settings.height,
56
                        x_range=(0, 100), y_range=(0, 100))
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
57
    steps = 40
58
    xradius = 25
59
    yradius = 45
60
    xmid = 50
61
    ymid = 50
62
    xlist = []
63
    ylist = []
64
    for angle in xrange(0, steps + 1):
65
        angle = float(angle) / steps * math.pi * 2
66
        xlist.append(math.cos(angle) * xradius + xmid)
67
        ylist.append(math.sin(angle) * yradius + ymid)
68
    chart.add_data(xlist)
69
    chart.add_data(ylist)
70
    chart.download('line-xy-circle.png')
71
22 by gak
- pygooglechart.py converted to unix line breaks
72
def sparklines():
73
    chart = SparkLineChart(settings.width, settings.height)
74
    chart.add_data(helper.random_data())
75
    chart.download('line-sparkline.png')
76
45 by gak
- Added filled line graph to examples
77
def fill():
78
46 by gak
- Added stripes and grid line chart to examples
79
    # Set the vertical range from 0 to 50
45 by gak
- Added filled line graph to examples
80
    max_y = 50
81
    chart = SimpleLineChart(200, 125, y_range=[0, max_y])
82
83
    # First value is the highest Y value. Two of them are needed to be
84
    # plottable.
85
    chart.add_data([max_y] * 2)
86
87
    # 3 sets of real data
88
    chart.add_data([28, 30, 31, 33, 35, 36, 42, 48, 43, 37, 32, 24, 28])
89
    chart.add_data([16, 18, 18, 21, 23, 23, 29, 36, 31, 25, 20, 12, 17])
90
    chart.add_data([7, 9, 9, 12, 14, 14, 20, 27, 21, 15, 10, 3, 7])
91
92
    # Last value is the lowest in the Y axis.
93
    chart.add_data([0] * 2)
94
95
    # Black lines
96
    chart.set_colours(['000000'] * 5)
97
98
    # Filled colours
99
    # from the top to the first real data
100
    chart.add_fill_range('76A4FB', 0, 1)
101
102
    # Between the 3 data values
103
    chart.add_fill_range('224499', 1, 2)
104
    chart.add_fill_range('FF0000', 2, 3)
49 by gak
- Added QR codes example
105
45 by gak
- Added filled line graph to examples
106
    # from the last real data to the
107
    chart.add_fill_range('80C65A', 3, 4)
108
109
    # Some axis data
110
    chart.set_axis_labels(Axis.LEFT, ['', max_y / 2, max_y])
111
    chart.set_axis_labels(Axis.BOTTOM, ['Sep', 'Oct', 'Nov', 'Dec'])
112
113
    chart.download('line-fill.png')
114
46 by gak
- Added stripes and grid line chart to examples
115
def stripes():
116
    
117
    # Set the vertical range from 0 to 100
118
    max_y = 100
119
120
    # Chart size of 200x125 pixels and specifying the range for the Y axis
121
    chart = SimpleLineChart(200, 125, y_range=[0, max_y])
122
123
    # Add the chart data
124
    data = [
125
        32, 34, 34, 32, 34, 34, 32, 32, 32, 34, 34, 32, 29, 29, 34, 34, 34, 37,
126
        37, 39, 42, 47, 50, 54, 57, 60, 60, 60, 60, 60, 60, 60, 62, 62, 60, 55,
127
        55, 52, 47, 44, 44, 40, 40, 37, 34, 34, 32, 32, 32, 31, 32
128
    ]
129
    chart.add_data(data)
130
    
131
    # Set the line colour to blue
132
    chart.set_colours(['0000FF'])
133
134
    # Set the vertical stripes
135
    chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2)
136
49 by gak
- Added QR codes example
137
    # Set the horizontal dotted lines
46 by gak
- Added stripes and grid line chart to examples
138
    chart.set_grid(0, 25, 5, 5)
139
140
    # The Y axis labels contains 0 to 100 skipping every 25, but remove the
141
    # first number because it's obvious and gets in the way of the first X
142
    # label.
143
    left_axis = range(0, max_y + 1, 25)
144
    left_axis[0] = ''
145
    chart.set_axis_labels(Axis.LEFT, left_axis)
146
147
    # X axis labels
148
    chart.set_axis_labels(Axis.BOTTOM, \
149
        ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'])
150
151
    chart.download('line-stripes.png')
152
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
153
def main():
154
    simple_random()
155
    xy_random()
156
    xy_rect()
157
    xy_circle()
22 by gak
- pygooglechart.py converted to unix line breaks
158
    sparklines()
45 by gak
- Added filled line graph to examples
159
    fill()
46 by gak
- Added stripes and grid line chart to examples
160
    stripes()
7 by gak
version bump, added BadContentTypeException, added a few examples, added COPYING licence, code is more PEP8 friendly, download() checks for content type and raises on bad http codes, add_data returns the index of the dataset, Line doesn't allow being an instance.
161
162
if __name__ == '__main__':
163
    main()
164