Sections
Sub-Sections
Last Change
Annotate
Revision Log
Download
Plain Text
Original Format
Metanav
Preferences
About Trac
Links
Slowchop Studios
Gerald Kaszuba
Advertisement

root/trunk/examples/line.py

Revision 62, 4.8 kB (checked in by gak, 12 months ago)
  • Fixed line endings to UNIX
  • Fixed Hashbangs
  • Added GPL headers
  • Property svn:keywords set to Id Revision
Line 
1#!/usr/bin/env python
2"""
3Copyright Gerald Kaszuba 2008
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 3 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program.  If not, see <http://www.gnu.org/licenses/>.
17"""
18
19import os
20import sys
21import math
22
23ROOT = os.path.dirname(os.path.abspath(__file__))
24sys.path.insert(0, os.path.join(ROOT, '..'))
25
26from pygooglechart import Chart
27from pygooglechart import SimpleLineChart
28from pygooglechart import XYLineChart
29from pygooglechart import SparkLineChart
30from pygooglechart import Axis
31
32import settings
33import helper
34
35def simple_random():
36    chart = SimpleLineChart(settings.width, settings.height, y_range=(0, 100))
37    chart.add_data(helper.random_data())
38    chart.download('line-simple-random.png')
39
40def xy_random():
41    chart = XYLineChart(settings.width, settings.height,
42                        x_range=(0, 100), y_range=(0, 100))
43    chart.add_data(helper.random_data())
44    chart.add_data(helper.random_data())
45    chart.download('line-xy-random.png')
46
47def xy_rect():
48    chart = XYLineChart(settings.width, settings.height,
49                        x_range=(0, 100), y_range=(0, 100))
50    chart.add_data([10, 90, 90, 10, 10])
51    chart.add_data([10, 10, 90, 90, 10])
52    chart.download('line-xy-rect.png')
53
54def xy_circle():
55    chart = XYLineChart(settings.width, settings.height,
56                        x_range=(0, 100), y_range=(0, 100))
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
72def sparklines():
73    chart = SparkLineChart(settings.width, settings.height)
74    chart.add_data(helper.random_data())
75    chart.download('line-sparkline.png')
76
77def fill():
78
79    # Set the vertical range from 0 to 50
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)
105
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
115def 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
137    # Set the horizontal dotted lines
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
153def main():
154    simple_random()
155    xy_random()
156    xy_rect()
157    xy_circle()
158    sparklines()
159    fill()
160    stripes()
161
162if __name__ == '__main__':
163    main()
Note: See TracBrowser for help on using the browser.