/+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 pygooglechart.py

  • Committer: gak
  • Date: 2008-04-26 04:21:22 UTC
  • Revision ID: git-v1:54d05aaccd0439e335e387fdd6ed33e4ed359855
Added zero line to bar charts

Show diffs side-by-side

added added

removed removed

Lines of Context:
277
277
    BASE_URL = 'http://chart.apis.google.com/chart?'
278
278
    BACKGROUND = 'bg'
279
279
    CHART = 'c'
 
280
    ALPHA = 'a'
 
281
    VALID_SOLID_FILL_TYPES = (BACKGROUND, CHART, ALPHA)
280
282
    SOLID = 's'
281
283
    LINEAR_GRADIENT = 'lg'
282
284
    LINEAR_STRIPES = 'ls'
304
306
        self.fill_types = {
305
307
            Chart.BACKGROUND: None,
306
308
            Chart.CHART: None,
 
309
            Chart.ALPHA: None,
307
310
        }
308
311
        self.fill_area = {
309
312
            Chart.BACKGROUND: None,
310
313
            Chart.CHART: None,
 
314
            Chart.ALPHA: None,
311
315
        }
312
316
        self.axis = []
313
317
        self.markers = []
402
406
    # -------------------------------------------------------------------------
403
407
 
404
408
    def fill_solid(self, area, colour):
405
 
        assert(area in (Chart.BACKGROUND, Chart.CHART))
 
409
        assert(area in Chart.VALID_SOLID_FILL_TYPES)
406
410
        _check_colour(colour)
407
411
        self.fill_area[area] = colour
408
412
        self.fill_types[area] = Chart.SOLID
421
425
        return args
422
426
 
423
427
    def fill_linear_gradient(self, area, angle, *args):
424
 
        assert(area in (Chart.BACKGROUND, Chart.CHART))
 
428
        assert(area in Chart.VALID_SOLID_FILL_TYPES)
425
429
        args = self._check_fill_linear(angle, *args)
426
430
        self.fill_types[area] = Chart.LINEAR_GRADIENT
427
431
        self.fill_area[area] = ','.join([str(angle)] + args)
428
432
 
429
433
    def fill_linear_stripes(self, area, angle, *args):
430
 
        assert(area in (Chart.BACKGROUND, Chart.CHART))
 
434
        assert(area in Chart.VALID_SOLID_FILL_TYPES)
431
435
        args = self._check_fill_linear(angle, *args)
432
436
        self.fill_types[area] = Chart.LINEAR_STRIPES
433
437
        self.fill_area[area] = ','.join([str(angle)] + args)
434
438
 
435
439
    def fill_to_url(self):
436
440
        areas = []
437
 
        for area in (Chart.BACKGROUND, Chart.CHART):
 
441
        for area in (Chart.BACKGROUND, Chart.CHART, Chart.ALPHA):
438
442
            if self.fill_types[area]:
439
443
                areas.append('%s,%s,%s' % (area, self.fill_types[area], \
440
444
                    self.fill_area[area]))
716
720
        assert(type(self) != BarChart)  # This is an abstract class
717
721
        Chart.__init__(self, *args, **kwargs)
718
722
        self.bar_width = None
 
723
        self.zero_lines = {}
719
724
 
720
725
    def set_bar_width(self, bar_width):
721
726
        self.bar_width = bar_width
722
727
 
723
 
    def get_url_bits(self, data_class=None):
 
728
    def set_zero_line(self, index, zero_line):
 
729
        self.zero_lines[index] = zero_line
 
730
 
 
731
    def get_url_bits(self, data_class=None, skip_chbh=False):
724
732
        url_bits = Chart.get_url_bits(self, data_class=data_class)
725
 
        if self.bar_width is not None:
 
733
        if not skip_chbh and self.bar_width is not None:
726
734
            url_bits.append('chbh=%i' % self.bar_width)
 
735
        zero_line = []
 
736
        if self.zero_lines:
 
737
            for index in xrange(max(self.zero_lines) + 1):
 
738
                if index in self.zero_lines:
 
739
                    zero_line.append(str(self.zero_lines[index]))
 
740
                else:
 
741
                    zero_line.append('0')
 
742
            url_bits.append('chp=%s' % ','.join(zero_line))
727
743
        return url_bits
728
744
 
729
745
 
762
778
    def get_url_bits(self, data_class=None):
763
779
        # Skip 'BarChart.get_url_bits' and call Chart directly so the parent
764
780
        # doesn't add "chbh" before we do.
765
 
        url_bits = Chart.get_url_bits(self, data_class=data_class)
 
781
        url_bits = BarChart.get_url_bits(self, data_class=data_class,
 
782
            skip_chbh=True)
766
783
        if self.group_spacing is not None:
767
784
            if self.bar_spacing is None:
768
785
                raise InvalidParametersException('Bar spacing is required to ' \
887
904
    chart = ScatterChart(320, 200)
888
905
    chart = SimpleLineChart(320, 200)
889
906
    chart = GroupedVerticalBarChart(320, 200)
890
 
    chart = SplineRadarChart(500, 500)
891
 
    chart = MapChart(440, 220)
892
 
    chart = GoogleOMeterChart(440, 220, x_range=(0, 100))
 
907
#    chart = SplineRadarChart(500, 500)
 
908
#    chart = MapChart(440, 220)
 
909
#    chart = GoogleOMeterChart(440, 220, x_range=(0, 100))
893
910
    sine_data = [math.sin(float(a) / math.pi) * 100 for a in xrange(100)]
894
911
    random_data = [random.random() * 100 for a in xrange(100)]
895
912
    random_data2 = [random.random() * 50 for a in xrange(100)]
896
913
#    chart.set_bar_width(50)
897
914
#    chart.set_bar_spacing(0)
898
 
#    chart.add_data(sine_data)
899
 
#    chart.add_data(random_data)
 
915
    chart.add_data(sine_data)
 
916
    chart.add_data(random_data)
 
917
    chart.set_zero_line(1, .5)
900
918
#    chart.add_data(random_data2)
901
919
#    chart.set_line_style(0, thickness=5)
902
920
#    chart.set_line_style(1, thickness=2, line_segment=10, blank_segment=5)
903
921
#    chart.set_title('heloooo weeee')
904
922
#    chart.set_legend(('sine wave', 'random * x'))
905
 
#    chart.set_colours(('ee2000', 'DDDDAA', 'fF03f2'))
906
 
#    chart.fill_solid(Chart.BACKGROUND, '123456')
907
 
#    chart.fill_linear_gradient(Chart.CHART, 20, '004070', 1, '300040', 0,
908
 
#        'aabbcc00', 0.5)
 
923
    chart.set_colours(('ee2000', 'DDDDAA', 'fF03f2'))
 
924
#    chart.fill_solid(Chart.ALPHA, '123456')
 
925
#    chart.fill_linear_gradient(Chart.ALPHA, 20, '004070', 1, '300040', 0,
 
926
#        'aabbcc55', 0.5)
909
927
#    chart.fill_linear_stripes(Chart.CHART, 20, '204070', .2, '300040', .2,
910
928
#        'aabbcc00', 0.2)
911
929
#    axis_left_index = chart.set_axis_range(Axis.LEFT, 0, 10)
914
932
#    chart.set_axis_positions(axis_bottom_index, [1, 25, 95])
915
933
#    chart.set_axis_style(axis_bottom_index, '003050', 15)
916
934
 
917
 
    chart.set_pie_labels(('apples', 'oranges', 'bananas'))
 
935
#    chart.set_pie_labels(('apples', 'oranges', 'bananas'))
918
936
 
919
937
#    chart.set_grid(10, 10)
920
938
#    for a in xrange(0, 100, 10):
929
947
#    chart.add_data([1,2,3])
930
948
#    chart.set_colours(('EEEEEE', '000000', '00FF00'))
931
949
 
932
 
    chart.add_data([50,75])
933
 
    chart.set_pie_labels(('apples', 'oranges'))
 
950
#    chart.add_data([50,75])
 
951
#    chart.set_pie_labels(('apples', 'oranges'))
934
952
 
935
953
    url = chart.get_url()
936
954
    print url