예제 #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
파일: googlecharts.py 프로젝트: peterbe/kl
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>'