/+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 03:30:05 UTC
  • Revision ID: git-v1:bc8d4e8cd189cf07ed248f5239ab1e89d31b0340
grids and line styles are not only restricted to line chart types

Show diffs side-by-side

added added

removed removed

Lines of Context:
311
311
        }
312
312
        self.axis = []
313
313
        self.markers = []
 
314
        self.line_styles = {}
 
315
        self.grid = None
314
316
 
315
317
    # URL generation
316
318
    # -------------------------------------------------------------------------
340
342
            url_bits.append(ret)
341
343
        if self.markers:
342
344
            url_bits.append(self.markers_to_url())
 
345
        if self.line_styles:
 
346
            style = []
 
347
            for index in xrange(max(self.line_styles) + 1):
 
348
                if index in self.line_styles:
 
349
                    values = self.line_styles[index]
 
350
                else:
 
351
                    values = ('1', )
 
352
                style.append(','.join(values))
 
353
            url_bits.append('chls=%s' % '|'.join(style))
 
354
        if self.grid:
 
355
            url_bits.append('chg=%s' % self.grid)
343
356
        return url_bits
344
357
 
345
358
    # Downloading
620
633
    def add_fill_simple(self, colour):
621
634
        self.markers.append(('B', colour, '1', '1', '1'))
622
635
 
623
 
 
624
 
class ScatterChart(Chart):
625
 
 
626
 
    def type_to_url(self):
627
 
        return 'cht=s'
628
 
 
629
 
    def annotated_data(self):
630
 
        yield ('x', self.data[0])
631
 
        yield ('y', self.data[1])
632
 
        if len(self.data) > 2:
633
 
            # The optional third dataset is relative sizing for point
634
 
            # markers.
635
 
            yield ('marker-size', self.data[2])
636
 
 
637
 
class LineChart(Chart):
638
 
 
639
 
    def __init__(self, *args, **kwargs):
640
 
        assert(type(self) != LineChart)  # This is an abstract class
641
 
        Chart.__init__(self, *args, **kwargs)
642
 
        self.line_styles = {}
643
 
        self.grid = None
 
636
    # Line styles
 
637
    # -------------------------------------------------------------------------
644
638
 
645
639
    def set_line_style(self, index, thickness=1, line_segment=None, \
646
640
            blank_segment=None):
651
645
            value.append(str(blank_segment))
652
646
        self.line_styles[index] = value
653
647
 
 
648
    # Grid
 
649
    # -------------------------------------------------------------------------
 
650
 
654
651
    def set_grid(self, x_step, y_step, line_segment=1, \
655
652
            blank_segment=0):
656
653
        self.grid = '%s,%s,%s,%s' % (x_step, y_step, line_segment, \
657
654
            blank_segment)
658
655
 
659
 
    def get_url_bits(self, data_class=None):
660
 
        url_bits = Chart.get_url_bits(self, data_class=data_class)
661
 
        if self.line_styles:
662
 
            style = []
663
 
            for index in xrange(max(self.line_styles) + 1):
664
 
                if index in self.line_styles:
665
 
                    values = self.line_styles[index]
666
 
                else:
667
 
                    values = ('1', )
668
 
                style.append(','.join(values))
669
 
            url_bits.append('chls=%s' % '|'.join(style))
670
 
        if self.grid:
671
 
            url_bits.append('chg=%s' % self.grid)
672
 
        return url_bits
 
656
 
 
657
class ScatterChart(Chart):
 
658
 
 
659
    def type_to_url(self):
 
660
        return 'cht=s'
 
661
 
 
662
    def annotated_data(self):
 
663
        yield ('x', self.data[0])
 
664
        yield ('y', self.data[1])
 
665
        if len(self.data) > 2:
 
666
            # The optional third dataset is relative sizing for point
 
667
            # markers.
 
668
            yield ('marker-size', self.data[2])
 
669
 
 
670
class LineChart(Chart):
 
671
 
 
672
    def __init__(self, *args, **kwargs):
 
673
        assert(type(self) != LineChart)  # This is an abstract class
 
674
        Chart.__init__(self, *args, **kwargs)
 
675
 
 
676
#    def get_url_bits(self, data_class=None):
 
677
#        url_bits = Chart.get_url_bits(self, data_class=data_class)
 
678
#        return url_bits
673
679
 
674
680
 
675
681
class SimpleLineChart(LineChart):
770
776
                raise InvalidParametersException('Bar width is required to ' \
771
777
                    'be set when setting bar spacing')
772
778
            url_bits.append('chbh=%i,%i' % (self.bar_width, self.bar_spacing))
773
 
        else:
 
779
        elif self.bar_width:
774
780
            url_bits.append('chbh=%i' % self.bar_width)
775
781
        return url_bits
776
782
 
851
857
 
852
858
 
853
859
def test():
854
 
    chart = GroupedVerticalBarChart(320, 200)
855
860
    chart = PieChart2D(320, 200)
856
861
    chart = ScatterChart(320, 200)
857
862
    chart = SimpleLineChart(320, 200)
 
863
    chart = GroupedVerticalBarChart(320, 200)
858
864
    chart = RadarChart(500, 500)
859
 
    sine_data = [math.sin(float(a) / 10) * 100 + 50 for a in xrange(100)]
 
865
    sine_data = [math.sin(float(a) / math.pi) * 100 for a in xrange(100)]
860
866
    random_data = [random.random() * 100 for a in xrange(100)]
861
 
    random_data2 = [random.random() * 4000 for a in xrange(10)]
 
867
    random_data2 = [random.random() * 50 for a in xrange(100)]
862
868
#    chart.set_bar_width(50)
863
869
#    chart.set_bar_spacing(0)
864
870
    chart.add_data(sine_data)
865
871
    chart.add_data(random_data)
866
 
#    chart.add_data(random_data2)
867
 
#    chart.set_line_style(1, thickness=2)
868
 
#    chart.set_line_style(2, line_segment=10, blank_segment=5)
869
 
    chart.set_title('heloooo weeee')
870
 
    chart.set_legend(('sine wave', 'random * x'))
 
872
    chart.add_data(random_data2)
 
873
#    chart.set_line_style(0, thickness=5)
 
874
#    chart.set_line_style(1, thickness=2, line_segment=10, blank_segment=5)
 
875
#    chart.set_title('heloooo weeee')
 
876
#    chart.set_legend(('sine wave', 'random * x'))
871
877
    chart.set_colours(('ee2000', 'DDDDAA', 'fF03f2'))
872
878
#    chart.fill_solid(Chart.BACKGROUND, '123456')
873
 
    chart.fill_linear_gradient(Chart.CHART, 20, '004070', 1, '300040', 0,
874
 
        'aabbcc00', 0.5)
 
879
#    chart.fill_linear_gradient(Chart.CHART, 20, '004070', 1, '300040', 0,
 
880
#        'aabbcc00', 0.5)
875
881
#    chart.fill_linear_stripes(Chart.CHART, 20, '204070', .2, '300040', .2,
876
882
#        'aabbcc00', 0.2)
877
 
    axis_left_index = chart.set_axis_range(Axis.LEFT, 0, 10)
878
 
#    axis_left_index = chart.set_axis_range(Axis.LEFT, 0, 10)
879
883
#    axis_left_index = chart.set_axis_range(Axis.LEFT, 0, 10)
880
884
#    axis_right_index = chart.set_axis_range(Axis.RIGHT, 5, 30)
881
885
#    axis_bottom_index = chart.set_axis_labels(Axis.BOTTOM, [1, 25, 95])
885
889
#    chart.set_pie_labels(('apples', 'oranges', 'bananas'))
886
890
 
887
891
#    chart.set_grid(10, 10)
888
 
 
889
892
#    for a in xrange(0, 100, 10):
890
893
#        chart.add_marker(1, a, 'a', 'AACA20', 10)
891
894