예제 #1
0
    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
예제 #2
0
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')
예제 #3
0
파일: bar.py 프로젝트: thqbop/nuvola
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