예제 #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()
예제 #2
0
def animalChanges(stats):


    for creature in ['rabbit', 'wolf']:
        chart = GroupedVerticalBarChart(600, 300)

        WYborn = []
        WYage = []
        WYstarv = []
        WYeaten = []
        WX = []
        for t in sorted(stats[creature].keys()):
            WX.append(t)
            born, age, starv, eaten = 0, 0, 0, 0
            for event in stats[creature][t]['event']:
                if event == LiveLog.BIRTH:
                    born += 1
                elif event == LiveLog.AGE:
                    age += 1
                elif event == LiveLog.STARV:
                    starv += 1
                elif event == LiveLog.EATEN:
                    eaten += 1
            WYborn.append(born)
            WYage.append(age)
            WYstarv.append(starv)
            WYeaten.append(eaten)

          #  print born, creature, str(stats[creature][t]['event'])

        chart.set_bar_width(4)
        chart.set_bar_spacing(1)
        chart.set_group_spacing(20)

        chart.set_title("Population changes/generation: / %s" % (creature))
        chart.add_data(WYborn)
        chart.add_data(WYage)
        chart.add_data(WYstarv)
        chart.add_data(WYeaten)
        chart.set_legend(['born', 'old age', 'starvation', 'eaten'])
        chart.set_colours(['00ff00', '000000', 'ff0000', 'ddbbbb'])
        chart.set_axis_labels(Axis.BOTTOM, range(0, max(WX) + 1, 5))

        chart.download('born-deaths-%s.png' % (creature))
예제 #3
0
    order = row[3],
    preceptor_id = row[4],
    preceptor_name = row[5],
    site_name = row[6],
  )
  conn.execute(ins)


preceptors = conn.execute(select([stats.c.preceptor_name, stats.c.site_name
  ]).group_by(stats.c.preceptor_name, stats.c.site_name))

for p in preceptors:
  chart = GroupedVerticalBarChart(500, 350,
    y_range=(0,5))
  chart.set_bar_width(7)
  chart.set_bar_spacing(0)
  chart.set_group_spacing(4)
  chart.set_colours(['ccffff', 'ffcc00', 'cc99ff'])
  chart.set_grid(0, 20, 5, 5)
  
  left_axis = range(0, 6, 1)
  left_axis[0] = '' #interfers with first x label
  chart.set_axis_labels(Axis.LEFT, left_axis)

  prec = p[0]
  site = p[1]
  questions = conn.execute(select([stats.c.question_name, stats.c.order, func.avg(stats.c.choice_id)],
      stats.c.preceptor_name == prec
    ).group_by(stats.c.order, stats.c.question_name, 
    ).order_by(stats.c.order
    )).fetchall()
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>'  
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>'
예제 #6
0
def animalChangesInTime(stats):

    stats_t = {'rabbit': {}, 'wolf': {}}
    for creature in ['rabbit', 'wolf']:
        for t in stats[creature].keys():
            new_t = (t / 100) * 100 #zmniejszamy ilosc
            if new_t not in stats_t[creature]:
                stats_t[creature][new_t] = []
            stats_t[creature][new_t] += stats[creature][t]['event']    #tylko eventy
            print stats[creature][t]['event']


    for creature in ['rabbit', 'wolf']:
        chart = GroupedVerticalBarChart(600, 300)

        WYborn = []
        WYage = []
        WYstarv = []
        WYeaten = []
        WYcount = []
        WX = []
        count = 0
        for t in sorted(stats_t[creature].keys()):
            WX.append(t)
            print t
            print stats_t[creature][t]
            born, age, starv, eaten = 0, 0, 0, 0
            for event in stats_t[creature][t]:
                if event == LiveLog.BIRTH:
                    born += 1
                    count += 1
                elif event == LiveLog.AGE:
                    age += 1
                    count -= 1
                elif event == LiveLog.STARV:
                    starv += 1
                    count -= 1
                elif event == LiveLog.EATEN:
                    eaten += 1
                    count -= 1
            WYborn.append(born)
            WYage.append(age)
            WYstarv.append(starv)
            WYeaten.append(eaten)
            WYcount.append(count)


        print WYborn
        print WYcount
        print WYeaten

        chart.set_bar_width(4)
        chart.set_bar_spacing(1)
        chart.set_group_spacing(20)

        chart.set_title("Population changes/time: / %s" % (creature))
        chart.add_data(WYborn)
        chart.add_data(WYage)
        chart.add_data(WYstarv)
        chart.add_data(WYeaten)
        chart.add_data(WYcount)
        chart.auto_scale = True
        chart.set_legend(['born', 'old age', 'starvation', 'eaten', 'population size'])
        chart.set_colours(['00ff00', '000000', 'ff0000', 'ddbbbb', 'aa00ee'])
        chart.set_axis_labels(Axis.BOTTOM, range(0, max(WX) + 1, 100))

        chart.download('life-%s.png' % (creature))