def get_grouped_bar_chart_image(self, data, **kw): """ Return image path of downloaded image from google charts api""" if len(data['y']) == 0: return '' from pygooglechart import GroupedHorizontalBarChart, Axis width = int(kw.get('width', 400)) height = int(kw.get('height', 250)) # How many members do we have in a group? members_cnt = len(data['y']) max_y = max(max(data['y'])) # since data['y'] is 2D chart = GroupedHorizontalBarChart(width, height, x_range=[0, max_y], y_range=[0, len(data['x'])]) # currently only 2 max members supported in a group colours = ['4D89D9', 'C6D9FD'] for member in data['y']: chart.add_data(member) chart.set_colours(colours[:members_cnt]) chart.set_axis_labels(Axis.LEFT, data['x']) bottom_labels = [ utils.intcomma(x) for x in range(0, max_y + 1, (max_y) / 5) ] chart.set_axis_labels(Axis.BOTTOM, bottom_labels) if kw.has_key('bar_spacing'): chart.set_bar_spacing(kw['bar_spacing']) if kw.has_key('group_spacing'): chart.set_group_spacing(kw['group_spacing']) if kw.has_key('bar_width'): chart.set_bar_width(kw['bar_width']) #Generate an hash from arguments kw_hash = hash(tuple(sorted(kw.items()))) for i in range(members_cnt): data['y'][i] = tuple(data['y'][i]) data_hash = hash( tuple(sorted([(k, tuple(v)) for k, v in data.iteritems()]))) args_hash = str(kw_hash) + str(data_hash) image_path = os.path.join(TARGET_DIR, "%s.png" % args_hash) if bool(kw.get('refresh', False)) or args_hash not in self.charts: #Get image from google chart api chart.download(image_path) if args_hash not in self.charts: self.charts.append(args_hash) self._p_changed = True return image_path
def grouped_horizontal(): chart = GroupedHorizontalBarChart(settings['width'], settings['height'], x_range=(0, 35)) chart.set_bar_width(5) chart.set_bar_spacing(2) chart.set_group_spacing(4) chart.set_colours(['00ff00', 'ff0000']) chart.add_data([1,2,3,4,5]) chart.add_data([1,4,9,16,25]) chart.download('bar-horizontal-grouped.png')
def grouped_horizontal(): chart = GroupedHorizontalBarChart(settings.width, settings.height, x_range=(0, 35)) chart.set_bar_width(5) chart.set_bar_spacing(2) chart.set_group_spacing(4) chart.set_colours(['00ff00', 'ff0000']) chart.add_data([1,2,3,4,5]) chart.add_data([1,4,9,16,25]) chart.download('bar-horizontal-grouped.png')
def get_grouped_bar_chart_image(self, data, **kw): """ Return image path of downloaded image from google charts api""" if len(data['y']) == 0: return '' from pygooglechart import GroupedHorizontalBarChart, Axis width = int(kw.get('width', 400)) height = int(kw.get('height', 250)) # How many members do we have in a group? members_cnt = len(data['y']) max_y = max(max(data['y'])) # since data['y'] is 2D chart = GroupedHorizontalBarChart(width, height, x_range=[0, max_y], y_range=[0, len(data['x'])]) # currently only 2 max members supported in a group colours = ['4D89D9', 'C6D9FD'] for member in data['y']: chart.add_data(member) chart.set_colours(colours[:members_cnt]) chart.set_axis_labels(Axis.LEFT, data['x']) bottom_labels = [utils.intcomma(x) for x in range(0, max_y + 1, (max_y)/5)] chart.set_axis_labels(Axis.BOTTOM, bottom_labels) if kw.has_key('bar_spacing'): chart.set_bar_spacing(kw['bar_spacing']) if kw.has_key('group_spacing'): chart.set_group_spacing(kw['group_spacing']) if kw.has_key('bar_width'): chart.set_bar_width(kw['bar_width']) #Generate an hash from arguments kw_hash = hash(tuple(sorted(kw.items()))) for i in range(members_cnt): data['y'][i] = tuple(data['y'][i]) data_hash = hash(tuple(sorted([(k, tuple(v)) for k, v in data.iteritems()]))) args_hash = str(kw_hash) + str(data_hash) image_path = os.path.join(TARGET_DIR, "%s.png" % args_hash) if bool(kw.get('refresh', False)) or args_hash not in self.charts: #Get image from google chart api chart.download(image_path) if args_hash not in self.charts: self.charts.append(args_hash) self._p_changed = True return image_path