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()
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))
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>'
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))