Пример #1
0
    def GetHtml(self):
        max = self._GetRescaledMax(self.__max)
        w = self.__width
        h = self.__height

        # We don't really care about StackedVerticalBarChart vs.
        # GroupedVerticalBarChart since we just have one data-set, but only the
        # stacked graph seems to respect the bar spacing option
        chart = StackedVerticalBarChart(w, h)

        # Compute bar width so that it fits in the overall graph width.
        bucket_width = (w - _Y_AXIS_SPACE) / len(self.__buckets)
        bar_width = bucket_width * 4 / 5
        space_width = bucket_width - bar_width

        chart.set_bar_width(bar_width)
        chart.set_bar_spacing(space_width)

        chart.add_data(self._GetRescaledData(self.__buckets, max))
        chart.set_axis_range(Axis.LEFT, 0, max)
        chart.set_axis_labels(Axis.BOTTOM, self._GetBucketLabels())

        # We render the title in the template instead of in the chart, to give
        # stat collections and individual stats similar appearance
        t = Template(file="templates/bucket-stat.tmpl",
                     searchList={
                         "id": self.id,
                         "title": self.__title,
                         "width": w,
                         "height": h,
                         "chart_url": chart.get_url()
                     })
        return unicode(t)
Пример #2
0
def stacked_vertical():
    chart = StackedVerticalBarChart(settings.width, settings.height,
                                    y_range=(0, 35))
    chart.set_bar_width(10)
    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-stacked.png')
def graph_multiple_choice(q):
    #question = get_object_or_404(Question, pk=q.pk)
    question = Question.objects.get(pk=q.pk)

    # collect answers to this question
    answers = Answer.objects.filter(question=question).order_by('choice')

    # old code for handling any number of choices
    # choices = { " " : 0 }
    # choices = choices.fromkeys(xrange(len(answers)), 0)

    # hardcode of four choices since ui limits to four
    choices = {1: 0, 2: 0, 3: 0, 4: 0}

    # grab the parsed entries for this question
    entries = Entry.objects.filter(question=question,\
        is_unparseable=False)

    # i'm assuming here that the Entry.text is the
    # same thing as the Answer.choice, presumably
    # a number for each choice 1 through  n
    #
    # iterate entries and tally the choices
    for e in entries:
        if int(e.text) in choices:
            choices[int(e.text)] += 1

    choice_counts = sortedDictValues1(choices)

    # collect the long, textual representation
    # of the answer choice for labelling the graph
    # along with the choice counts of each choice
    # for display on large graphs
    long_answers_big = []
    long_answers_small = []
    for a in answers:
        long_answers_small.append(a.text)
        long_answers_big.append(a.text + ' (' + str(choices[int(a.choice)]) +
                                ')')

    for size in GRAPH_SIZES:
        # configure and save the graph
        bar = StackedVerticalBarChart(int(size), golden(int(size)),\
           y_range=(0, max(choice_counts)))
        bar.set_colours([choice(['0091C7', '0FBBD0'])])
        bar.add_data(choice_counts)
        bar.set_bar_width(int(int(size) / (len(choices) + 1)))
        if (size == GRAPH_SIZES[0]):
            index = bar.set_axis_labels(Axis.BOTTOM, long_answers_small)
        else:
            index = bar.set_axis_labels(Axis.BOTTOM, long_answers_big)
        bar.set_axis_style(index, '202020', font_size=9, alignment=0)
        filename = GRAPH_DIR + str(question.pk) + '-' + size + '-entries.png'
        bar.download(filename)
        print 'saved ' + filename

    return 'graphed entries ' + question.text
Пример #4
0
def makechart():
    global name, width, height, bar_width

    totaltime = [0.0] * len(categories)
    totalmeetingtime = [0.0] * len(categories)
    allcategories = [""] * len(categories)
    i = 0
    max = 0

    for x in categories:
        mtime = 0.0
        allcategories[i] = x[0:9]
        if categories[x] > max:
            max = categories[x]
        if x in meetingcategories:
            mtime = meetingcategories[x]

        totalmeetingtime[i] = mtime
        totaltime[i] = categories[x] - mtime
        i += 1

    max = int(math.ceil(max / 100.0) * 100)
    part = int(max / 4)
    bar_width = int(width / (len(categories) + 4.5))

    #general chart properties
    chart = StackedVerticalBarChart(width, height, y_range=(0, max))
    chart.set_title('Working Hours in ' + get_month(name))
    chart.set_legend(['Tasks', 'Meetings'])
    chart.set_bar_width(bar_width)

    #left label
    leftlabel = chart.set_axis_labels(Axis.LEFT,
                                      [0, part, part * 2, part * 3, max])
    chart.set_axis_style(leftlabel, '202020', font_size=10, alignment=0)
    #chart.set_axis_positions(leftlabel, [50])

    #bottom label
    bottomlabel = chart.set_axis_labels(Axis.BOTTOM, allcategories)
    chart.set_axis_style(bottomlabel, '202020', font_size=10, alignment=0)

    #colors and data
    chart.set_colours(['00ff00', 'ff0000'])
    chart.add_data(totaltime)
    chart.add_data(totalmeetingtime)

    #get it
    chart.download(name + '.png')
def graph_test_vector(candidates, data, directory, title, y_axis):
    if len(candidates) != len(data):
        raise AttributeError('Length of candidates and data does not match')

    chart = StackedVerticalBarChart(700,
                                    428,
                                    auto_scale=False,
                                    custom_scaling=True)
    chart.set_bar_width(41)
    chart.set_colours(('3366CC', '000000'))
    chart.add_data(data)
    chart.set_axis_range('y', 0, max(data) + 0.1 * max(data))
    chart.set_axis_labels('x', candidates)
    x_title_index = chart.set_axis_labels('x', ['Candidate'])
    y_title_index = chart.set_axis_labels('y', [y_axis])
    chart.set_axis_positions(x_title_index, [50])
    chart.set_axis_positions(y_title_index, [50])
    chart.set_title(title)

    # (dataset, all bars, formating, colour, width)
    chart.add_marker(0, -1, 'N', '000000', 11)
    chart.download(os.path.join(directory, '%s.png' % title.replace(' ', '')))
Пример #6
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
Пример #7
0
scraperwiki.sqlite.attach(sourcescraper, "src")
sdata = scraperwiki.sqlite.execute(
    "select Year, Dates, State, Location, Mortality from src.swdata WHERE Mortality > 1000"
)

rows = sdata.get("data")
print rows
#    for row in rows:
#        pm10val = int(rows[4])
#        print pm10val
pm10val = int(rows[0][4])

colour = 'ad0000'

# Draw the bar chart
chart = StackedVerticalBarChart(150, 200, y_range=(0, 4000))
chart.set_colours([colour, 'ffffff', 'ffffff'])
chart.set_bar_width(40)
chart.add_data([0, pm10val, 0])
chart.add_data([35, 1, 1])
chart.add_data([1, 1, 1])
chart.set_axis_labels(Axis.LEFT, [0, 25, 50])
chart.add_marker(1, 0, 'tLimit (35)', 'ad0000', 11)
chart.add_marker(0, 1, 'fSo far (%s)' % (pm10val), colour, 11)
chart.add_marker(0, 2, 'tSafe (0)', '45bb00', 11)
#print '<img src="%s"></img>' % chart.get_url()
import scraperwiki.sqlite
from pygooglechart import StackedVerticalBarChart, Axis

# Get data
sourcescraper = 'annual_animal_deaths'
Пример #8
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