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 _get_bar_chart(width, height, data, background_color=None, colour=None): data = sorted([(int(k), v) for (k,v) in data.items()]) min_ = min([x[1] for x in data]) max_ = max([x[1] for x in data]) chart = GroupedVerticalBarChart(width, height, y_range=(min_, max_+30)) # add 30px for some extra space chart.add_data([x[1] for x in data]) chart.set_axis_labels(pygooglechart.Axis.BOTTOM, [x[0] for x in data]) interval = (max_ - min_) / 10 if interval > 1000: interval = 5000 elif interval > 500: interval = 1000 elif interval > 100: interval = 500 elif interval > 50: interval = 100 else: interval = 50 max_range = interval * (max_ / interval +1) chart.set_axis_labels(pygooglechart.Axis.LEFT, [str(x) for x in range(0, max_range, interval)]) if background_color: chart.fill_solid(chart.BACKGROUND, background_color) if colour: chart.set_colours([colour]) return chart.get_url()
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>'
commitsfile = open(datafile, 'r') name = os.path.basename(datafile) data_array = [] legend_array = [] chart = GroupedVerticalBarChart(400, 200, y_range=(0, 40)) #chart.set_bar_width(25) #chart.set_bar_width(25) for line in commitsfile: (legend, data) = line.split(' ') data_array.append(int(data.strip())) legend_array.append(legend) print data_array print legend_array chart.add_data(data_array) chart.set_axis_labels('x', legend_array) chart.set_axis_labels('y', range(0,50,10)) chart.set_title(name.split('.')[0].upper()+" - # of developers/year") print chart.get_url() chart.download('images/committers_by_year_'+str(name.split('.')[0])+'.png')
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>'