32
33
# Helper variables and functions
33
34
# -----------------------------------------------------------------------------
36
37
__author__ = 'Gerald Kaszuba'
38
39
reo_colour = re.compile('^([A-Fa-f0-9]{2,2}){3,4}$')
163
164
raise DataOutOfRangeException()
164
165
encoded_data.append(','.join(sub_data))
165
return 'chd=t:' + '|'.join(encoded_data)
166
return 'chd=t:' + '%7c'.join(encoded_data)
168
169
def scale_value(cls, value, range):
345
347
# optional arguments
347
349
url_bits.append('chtt=%s' % self.title)
350
if self.title_colour and self.title_font_size:
351
url_bits.append('chts=%s,%s' % (self.title_colour, \
352
self.title_font_size))
349
url_bits.append('chdl=%s' % '|'.join(self.legend))
354
url_bits.append('chdl=%s' % '%7c'.join(self.legend))
350
355
if self.legend_position:
351
356
url_bits.append('chdlp=%s' % (self.legend_position))
353
358
url_bits.append('chco=%s' % ','.join(self.colours))
354
359
if self.colours_within_series:
355
url_bits.append('chco=%s' % '|'.join(self.colours_within_series))
360
url_bits.append('chco=%s' % '%7c'.join(self.colours_within_series))
356
361
ret = self.fill_to_url()
358
363
url_bits.append(ret)
371
376
style.append(','.join(values))
372
url_bits.append('chls=%s' % '|'.join(style))
377
url_bits.append('chls=%s' % '%7c'.join(style))
374
379
url_bits.append('chg=%s' % self.grid)
396
401
self.title = None
403
def set_title_style(self, colour, font_size):
404
if not colour is None:
405
_check_colour(colour)
406
self.title_colour = colour
407
self.title_font_size = font_size
398
409
def set_legend(self, legend):
399
410
"""legend needs to be a list, tuple or None"""
400
411
assert(isinstance(legend, list) or isinstance(legend, tuple) or
474
485
areas.append('%s,%s,%s' % (area, self.fill_types[area], \
475
486
self.fill_area[area]))
477
return 'chf=' + '|'.join(areas)
488
return 'chf=' + '%7c'.join(areas)
480
491
# -------------------------------------------------------------------------
604
615
def set_axis_labels(self, axis_type, values):
605
616
assert(axis_type in Axis.TYPES)
606
values = [urllib.quote(a) for a in values]
617
values = [urllib.quote(str(a)) for a in values]
607
618
axis_index = len(self.axis)
608
619
axis = LabelAxis(axis_index, axis_type, values)
609
620
self.axis.append(axis)
654
665
url_bits.append('chxt=%s' % ','.join(available_axis))
656
url_bits.append('chxl=%s' % '|'.join(label_axis))
667
url_bits.append('chxl=%s' % '%7c'.join(label_axis))
658
url_bits.append('chxr=%s' % '|'.join(range_axis))
669
url_bits.append('chxr=%s' % '%7c'.join(range_axis))
660
url_bits.append('chxp=%s' % '|'.join(positions))
671
url_bits.append('chxp=%s' % '%7c'.join(positions))
662
url_bits.append('chxs=%s' % '|'.join(styles))
673
url_bits.append('chxs=%s' % '%7c'.join(styles))
663
674
return '&'.join(url_bits)
665
676
# Markers, Ranges and Fill area (chm)
666
677
# -------------------------------------------------------------------------
668
679
def markers_to_url(self):
669
return 'chm=%s' % '|'.join([','.join(a) for a in self.markers])
680
return 'chm=%s' % '%7c'.join([','.join(a) for a in self.markers])
671
682
def add_marker(self, index, point, marker_type, colour, size, priority=0):
672
683
self.markers.append((marker_type, colour, str(index), str(point), \
676
687
self.markers.append(('r', colour, '0', str(start), str(stop)))
678
689
def add_data_line(self, colour, data_set, size, priority=0):
679
self.markers.append(('D', colour, str(data_set), '0', str(size), str(priority)))
690
self.markers.append(('D', colour, str(data_set), '0', str(size), \
681
def add_marker_text(self, string, colour, data_set, data_point, size, priority=0):
682
self.markers.append((str(string), colour, str(data_set), str(data_point), str(size), str(priority)))
693
def add_marker_text(self, string, colour, data_set, data_point, size, \
695
self.markers.append((str(string), colour, str(data_set), \
696
str(data_point), str(size), str(priority)))
684
698
def add_vertical_range(self, colour, start, stop):
685
699
self.markers.append(('R', colour, '0', str(start), str(stop)))
885
899
def get_url_bits(self, data_class=None):
886
900
url_bits = Chart.get_url_bits(self, data_class=data_class)
887
901
if self.pie_labels:
888
url_bits.append('chl=%s' % '|'.join(self.pie_labels))
902
url_bits.append('chl=%s' % '%7c'.join(self.pie_labels))
891
905
def annotated_data(self):
894
908
for dataset in self.data:
895
909
yield ('x', dataset)
911
def scaled_data(self, data_class, x_range=None, y_range=None):
913
x_range = [0, sum(self.data[0])]
914
return Chart.scaled_data(self, data_class, x_range, self.y_range)
898
917
class PieChart2D(PieChart):
984
1003
if self.encoding:
985
1004
url_bits.append('choe=%s' % self.encoding)
986
1005
if self.ec_level:
987
url_bits.append('chld=%s|%s' % (self.ec_level, self.margin))
1006
url_bits.append('chld=%s%%7c%s' % (self.ec_level, self.margin))
990
1009
def set_encoding(self, encoding):