Exemple #1
0
def get_chart_url(data):
    chart = GroupedVerticalBarChart(800, 200, y_range=(0, max(data)))
    chart.set_bar_width(3) #should be calculated
    chart.set_bar_spacing(0)
    chart.set_colours(['4D89F9'])
    chart.add_data(data)
    return chart.get_url()
Exemple #2
0
def grouped_vertical():
    chart = GroupedVerticalBarChart(settings.width, settings.height,
                                    y_range=(0, 35))
    chart.set_bar_width(5)
    chart.set_colours(['00ff00', 'ff0000'])
    chart.add_data([1,2,3,4,5])
    chart.add_data([1,4,9,16,25])
    chart.download('bar-vertical-grouped.png')
Exemple #3
0
    def bargraph(self, days, bars, output, title=""):

        data = []
        min_count = 0
        max_count = 0
        date = lambda i: datetime.date.today() + datetime.timedelta(-days + i)

        for i in range(0, days + 1):
            count = bars[date(i)]
            max_count = max(count, max_count)
            min_count = min(count, min_count)
            data.append(count)
        # TOFIX: google chart API for negative numbers is too screwy, for now only >0
        min_count = max(min_count, 0)
        chart = GroupedVerticalBarChart(800,
                                        300,
                                        y_range=[min_count, max_count])
        chart.add_data(data)
        chart.set_bar_width(500 / days)
        # Set the line colour to blue
        chart.set_colours(['0000FF'])

        # Set the horizontal dotted lines
        chart.set_grid(0, 25, 5, 5)

        if days >= 30:
            fmt = "%d"
        else:
            fmt = "%d/%m"
        chart.set_axis_labels(Axis.BOTTOM, \
                              [date(i).strftime(fmt) for i in range(0,days)])

        # The Y axis labels contains 0 to 100 skipping every 25, but remove the
        # first number because it's obvious and gets in the way of the first X
        # label.
        delta = float(max_count - min_count) / 100
        skip = max(int(delta) / 5 * 100, 100)
        left_axis = range(0, max_count + 1, skip)
        left_axis[0] = ''
        chart.set_axis_labels(Axis.LEFT, left_axis)

        if len(title) > 0:
            chart.set_title(title % days)

        chart.download(output)
Exemple #4
0
def _bar_graph(data,
               legends,
               axis_labels,
               size,
               steps,
               type=StackedVerticalBarChart,
               multiline=False):

    if multiline:
        max_values = []
        min_values = []
        for row in data:
            max_values.append(max(row))
            min_values.append(min(row))
        max_value = max(max_values)
        min_value = min(min_values)
    else:
        max_value = max(data)
        min_value = min(data)

    #validando si hay datos para hacer grafico
    if max_value == 0:
        return None

    step = ((max_value * 1.05) - (min_value * 0.95)) / steps

    #validando en caso de el paso sea menor que uno y de cero en la conversion
    if step < 1:
        step = 1

    tope = int(round(max_value * 1.05))
    if tope < max_value:
        tope += 2
    else:
        tope += 1

    left_axis = range(int(round(min_value * 0.95)), tope, int(step))
    left_axis[0] = ''

    if type == StackedHorizontalBarChart:
        graph = StackedHorizontalBarChart(size[0],
                                          size[1],
                                          x_range=(0, max_value * 1.05))
        graph.set_axis_labels(Axis.BOTTOM, left_axis)
        if axis_labels:
            graph.set_axis_labels(Axis.LEFT, axis_labels)
    elif type == StackedVerticalBarChart:
        graph = StackedVerticalBarChart(size[0],
                                        size[1],
                                        y_range=(0, max_value * 1.05))
        graph.set_axis_labels(Axis.LEFT, left_axis)
        if axis_labels:
            graph.set_axis_labels(Axis.BOTTOM, axis_labels)
    elif type == GroupedHorizontalBarChart:
        graph = GroupedHorizontalBarChart(size[0],
                                          size[1],
                                          x_range=(0, max_value * 1.05))
        graph.set_axis_labels(Axis.BOTTOM, left_axis)
        if axis_labels:
            graph.set_axis_labels(Axis.LEFT, axis_labels)
        graph.set_bar_spacing(5)
    elif type == GroupedVerticalBarChart:
        graph = GroupedVerticalBarChart(size[0],
                                        size[1],
                                        y_range=(0, max_value * 1.05))
        graph.set_axis_labels(Axis.LEFT, left_axis)
        if axis_labels:
            graph.set_axis_labels(Axis.BOTTOM, axis_labels)
        graph.set_bar_spacing(5)
    else:
        pass  #raise exception

    if multiline:
        for fila in data:
            graph.add_data(fila)
    else:
        graph.add_data(data)

    graph.set_colours(
        ['FFBC13', '22A410', 'E6EC23', '2B2133', 'BD0915', '3D43BD'])
    graph.set_bar_width(44)
    graph.set_legend(legends)
    graph.set_legend_position('b')

    return graph
def PrintAverageCharts(dataviews):
    # another chart that shows the deviation from the average over the week, as a bar chart
    print '<table frame="border">'
    ncols = 3
    print '<tr><td colspan="%d" align="center" style="font-family:Arial;">Averaged Pollutants per day of week</td></tr>' % ncols
    icharts = 0
    for title, view in dataviews:
        weekchart = dict(
            [d, dict([k, []] for k in view.keys())] for d in range(7)
        )  # for each day of the week, and for each data type an empty list

        # for each dataset in this view, put datapoint into the list of the week day
        for k in view:
            data = view[k]
            for iday in range(len(data)):
                weekchart[(iday + firstweekday) % 7][k].append(data[iday])

        # bar chart of averages per day
        datasets = []
        max_y = None
        for k in view:
            data = [0. for i in range(7)]
            for d in weekchart:
                data[d] = sum(weekchart[d][k]) / len(weekchart[d][k])
            datasets.append(data)
            max_y = max(max_y, max(data))

        # bar chart
        c = GroupedVerticalBarChart(400, 250, y_range=[0, max_y])
        c.set_bar_width(20 / len(datasets))
        c.set_bar_spacing(0)
        if len(datasets) > 1:
            c.set_legend([k[0] for k in view.keys()])

        # Set the line colours
        c.set_colours(['0000FF', 'FF0000'])

        for data in datasets:
            c.add_data(data)
        # y axis labels
        if max_y > 30:
            left_axis = range(0, int(max_y) + 1, 5)
        elif max_y > 10:
            left_axis = range(0, int(max_y) + 1, 1)
        elif max_y > 5:
            left_axis = []
            v = 0.
            while v < max_y + 0.5:
                left_axis.append(v)
                v += 0.5
        else:
            left_axis = []
            v = 0.
            while v < max_y + 0.1:
                left_axis.append(v)
                v += 0.1

        left_axis[0] = ''  # no label at 0
        c.set_axis_labels(Axis.LEFT, left_axis)
        c.set_axis_labels(Axis.BOTTOM, [weekdays[d] for d in weekchart.keys()])
        if icharts % ncols == 0:
            print '%s<tr>' % (icharts > 0 and '</tr>' or '')
        print '<td><img src="%s&chtt=%s"></td>' % (c.get_url(), title)
        icharts += 1
    print '</tr></table>'
Exemple #6
0
def __bar_graphic__(data,
                    legends,
                    axis_labels,
                    size,
                    steps,
                    type=StackedVerticalBarChart,
                    multiline=False):

    if multiline:
        max_values = []
        min_values = []
        for row in data:
            max_values.append(max(row))
            min_values.append(min(row))
        max_value = max(max_values)
        min_value = min(min_values)
    else:
        max_value = max(data)
        min_value = min(data)

    step = ((max_value * 1.05) - (min_value * 0.95)) / steps
    left_axis = range(int(min_value * 0.95), int(max_value * 1.05), int(step))
    left_axis[0] = ''

    if type == StackedHorizontalBarChart:
        graph = StackedHorizontalBarChart(size[0],
                                          size[1],
                                          x_range=(0, max_value * 1.05))
        graph.set_axis_labels(Axis.BOTTOM, left_axis)
        graph.set_axis_labels(Axis.LEFT, axis_labels)
    elif type == StackedVerticalBarChart:
        graph = StackedVerticalBarChart(size[0],
                                        size[1],
                                        y_range=(0, max_value * 1.05))
        graph.set_axis_labels(Axis.LEFT, left_axis)
        graph.set_axis_labels(Axis.BOTTOM, axis_labels)
    elif type == GroupedHorizontalBarChart:
        graph = GroupedHorizontalBarChart(size[0],
                                          size[1],
                                          x_range=(0, max_value * 1.05))
        graph.set_axis_labels(Axis.BOTTOM, left_axis)
        graph.set_axis_labels(Axis.LEFT, axis_labels)
        graph.set_bar_spacing(5)
    elif type == GroupedVerticalBarChart:
        graph = GroupedVerticalBarChart(size[0],
                                        size[1],
                                        y_range=(0, max_value * 1.05))
        graph.set_axis_labels(Axis.LEFT, left_axis)
        graph.set_axis_labels(Axis.BOTTOM, axis_labels)
        graph.set_bar_spacing(5)
    else:
        pass  #raise exception

    if multiline:
        for fila in data:
            graph.add_data(fila)
    else:
        graph.add_data(data)

    graph.set_colours(
        ['FFBC13', '22A410', 'E6EC23', '2B2133', 'BD0915', '3D43BD'])
    graph.set_bar_width(40)
    graph.set_legend(legends)
    graph.set_legend_position('b')

    return graph