/+junk/pygooglechart-py3k

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/%2Bjunk/pygooglechart-py3k

« back to all changes in this revision

Viewing changes to examples/line.py

  • Committer: gak
  • Date: 2007-12-13 05:31:11 UTC
  • Revision ID: git-v1:606b8fe55157458136af5c54683fe3079a000b92
Added GPL license file "COPYING"

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
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
 
"""
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
 
 
26
 
from pygooglechart import Chart
27
 
from pygooglechart import SimpleLineChart
28
 
from pygooglechart import XYLineChart
29
 
from pygooglechart import SparkLineChart
30
 
from pygooglechart import Axis
31
 
 
32
 
import settings
33
 
import helper
34
 
 
35
 
def 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
 
 
40
 
def 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
 
 
47
 
def 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
 
 
54
 
def 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 range(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
 
 
72
 
def sparklines():
73
 
    chart = SparkLineChart(settings.width, settings.height)
74
 
    chart.add_data(helper.random_data())
75
 
    chart.download('line-sparkline.png')
76
 
 
77
 
def 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
 
 
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
 
 
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
 
 
153
 
def main():
154
 
    simple_random()
155
 
    xy_random()
156
 
    xy_rect()
157
 
    xy_circle()
158
 
    sparklines()
159
 
    fill()
160
 
    stripes()
161
 
 
162
 
if __name__ == '__main__':
163
 
    main()
164