예제 #1
0
    def get(self):
        list = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']
        list2 = []
        for title in list:
            list2.append(int(getdata(title, 'funds').custom['amount'].text))
        max_y = 10000
        chart = SimpleLineChart(200, 125, y_range=[0, max_y])

        chart.add_data([2000, 3000, 5000, 1200, 5000, 4000, 1000, 3000, 5900])

        # Set the line colour to blue
        chart.set_colours(['0000FF'])

        # Set the vertical stripes
        chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2)

        # Set the horizontal dotted lines
        chart.set_grid(0, 25, 5, 5)

        # The Y axis labels contains 0 to 100 skipping every 25, but remove the
        # first number because it's obvious and gets in the way of the first X
        # label.
        left_axis = range(0, max_y + 1, 25)
        left_axis[0] = ''
        chart.set_axis_labels(Axis.LEFT, left_axis)

        # X axis labels
        chart.set_axis_labels(Axis.BOTTOM, list)

        url2 = chart.get_url()
        self.response.out.write(
            template.render('template/donate.html', {
                'url2': url2,
            }))
예제 #2
0
def simpleChart3(bottom_labels, data1, data2):
    datamin, datamax = min(min(data1, data2)), max(max(data1, data2))
    datamin = int(datamin - 0.5)
    datamax = int(datamax + 0.5)
    chart = SimpleLineChart(200, 125, y_range=[datamin, datamax])
    chart.add_data(data1)
    chart.add_data(data2)

    left_axis = [datamin, 0, datamax]

    left_axis[0] = ''  # no label at 0
    chart.set_axis_labels(Axis.LEFT, left_axis)
    chart.set_axis_labels(Axis.BOTTOM, bottom_labels)
    chart.set_axis_labels(Axis.BOTTOM,
                          ['X Axis'])  # second label below first one
    chart.set_axis_positions(
        2, [50.0])  # position, left is 0., right is 100., 50. is center

    # Set the line colour
    chart.set_colours(['0000FF', 'FF0000'])

    # Set the horizontal dotted lines
    chart.set_grid(0, 25, 5, 5)

    # Set vertical stripes
    stripes = ['CCCCCC', 0.2, 'FFFFFF', 0.2]
    chart.fill_linear_stripes(Chart.CHART, 0, *stripes)
    return chart
    def velocity_chart(self):

        graph_width = 600
        graph_height = 300

        x_max = self.total_iterations
        y_max = max(max(self.estimate_stories_data()),
                    max(self.estimate_tasks_data()), max(self.work_data()))

        chart = SimpleLineChart(graph_width,
                                graph_height,
                                x_range=(1, x_max + 1),
                                y_range=(0, y_max + 1))

        chart.add_data(self.estimate_stories_data())
        chart.add_data(self.estimate_tasks_data())
        chart.add_data(self.work_data())

        chart.set_grid(0, 100.0 / y_max + 1, 5, 5)
        chart.set_colours(['FF0000', '00FF00', '0000FF'])
        chart.set_legend(
            [_('rough story estimates'),
             _('task estimates'),
             _('worked')])
        chart.set_legend_position('b')
        chart.set_axis_labels(Axis.LEFT, ['', '', _('days')])
        chart.set_axis_labels(Axis.BOTTOM, list(range(1, x_max + 1)))
        chart.set_axis_range(Axis.LEFT, 0, y_max + 1)

        return chart.get_url(data_class=ExtendedData)
예제 #4
0
def gchart(data,
           node,
           check,
           metric,
           start=datetime.now() - timedelta(days=1),
           end=datetime.now()):
    d = []
    ts = []
    for p in data['metrics'][0]['data']:
        d.append(float(p['avg']))
        ts.append(p['ts'])

    # Chart size of 200x125 pixels and specifying the range for the Y axis
    max_y = int(max(d))
    chart = SimpleLineChart(450, 250, y_range=[0, max_y])
    chart.add_data(d)
    left_axis = range(0, max_y + 1, max_y / 5)
    left_axis[0] = ''
    chart.set_axis_labels(Axis.LEFT, left_axis)
    min_dt = datetime.fromtimestamp(min(ts))
    max_dt = datetime.fromtimestamp(max(ts))
    chart.set_axis_labels(Axis.BOTTOM, [str(min_dt), str(max_dt)])
    title = '%s.%s.%s' % (node['name'], check['type'], metric)
    chart.set_title(title)
    return chart.get_url()
예제 #5
0
def simpleChart2(bottom_labels, data):
    # round min and max to nearest integers
    datamin = int(min(data) - 0.5)
    datamax = int(max(data) + 0.5)

    chart = SimpleLineChart(200, 125, y_range=[datamin, datamax])
    chart.add_data(data)

    left_axis = ['min', 0, 'max']
    chart.set_axis_labels(Axis.LEFT, left_axis)
    chart.set_axis_labels(Axis.BOTTOM, bottom_labels)
    chart.set_axis_labels(Axis.BOTTOM,
                          ['X Axis'])  # second label below first one
    chart.set_axis_positions(
        2, [50.0])  # position, left is 0., right is 100., 50. is center

    # Set the line colour
    chart.set_colours(['0000FF'])

    # Set the horizontal dotted lines
    chart.set_grid(0, 25, 5, 5)

    # Set vertical stripes
    stripes = ['CCCCCC', 0.2, 'FFFFFF', 0.2]
    chart.fill_linear_stripes(Chart.CHART, 0, *stripes)
    return chart
예제 #6
0
    def create_graph(self, particle_data, time_data):
        # Set the vertical range from 0 to 2
        max_y = 2

        # Chart size of 500x500 pixels and specifying the range for the Y axis
        chart = SimpleLineChart(500, 500, y_range=[0, max_y])

        # Add the chart data
        data = particle_data

        chart.add_data(data)

        # Set the line color blue
        chart.set_colours(['0000FF'])

        # Set the vertical stripes
        chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2)

        # Set the horizontal dotted lines
        chart.set_grid(0, 25, 5, 5)

        # The Y axis labels
        left_axis = ['0.25', '0.5', '0.75', '1']
        left_axis[0] = ''
        chart.set_axis_labels(Axis.LEFT, left_axis)
        left_axis2 = "Proton Flux"[::-1]
        chart.set_axis_labels(Axis.LEFT, left_axis2)

        # X axis labels
        chart.set_axis_labels(Axis.BOTTOM, time_data[0:3][::-1])
        chart.set_axis_labels(Axis.BOTTOM, "Time")

        chart.download('chart.png')
        return True
예제 #7
0
    def __init__(self):

        # Set the vertical range from 0 to 100
        factor = 8 - 1 
        max_y = 20 * factor
        max_x = 250
        # Chart size of 200x125 pixels and specifying the range for the Y axis
        self.chart = SimpleLineChart(width=50*factor, height=25*factor, 
                                     title='ping ftp.sunet.se',
#                                     legend=True,
                                     x_range=[0, max_x],                                      
                                     y_range=[0, max_y])


        # Set the line colour to blue
        self.chart.set_colours(colours=['0000FF'])

        # Set the vertical stripes:arguments area, angle etc.
        #self.chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2)

        # Set the horizontal dotted lines
        #self.chart.set_grid(x_step=0, y_step=5*factor, line_segment=factor, blank_segment=factor)

        # The Y axis labels contains 0 to 100 skipping every 25, but remove the
        # first number because it's obvious and gets in the way of the first X
        # label.
        left_axis = range(0, max_y + 1, 25)
        left_axis[0] = ''
        self.chart.set_axis_labels(axis_type=Axis.LEFT, values=left_axis)

        # X axis labels
        self.chart.set_axis_labels(axis_type=Axis.BOTTOM, \
#        ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'])
        values= [ ' ', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'])
def process (name, date):
    newdate = date[8:10] + "_" + date[5:7] + "_" + date[0:4]
    url = r"http://www.lloydsbankinggroup.com/media/excel/2010/%s_historic_data.xls" % newdate
    print url
    url = r"http://www.lloydsbankinggroup.com/media/excel/2010/04_06_10_historic_data.xls"
    book = xlrd.open_workbook(file_contents=scrape(url))
    sheet = book.sheet_by_name (name)
    months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']

    data = []
    i = 1
    while i < 500:
        try:
            month = sheet.cell_value (i, 0)
            year  = sheet.cell_value (i, 1)
            level = sheet.cell_value (i, 2)
        except:
            break
        when= "%04d-%02d-01" % (int(year), months.index (month) + 1)
        i = i + 1
        data.append (level)        
        sqlite.save(unique_keys=["Date"], data={"Date":when, "Index":level})

    chart = SimpleLineChart(500, 255, y_range=[0, 700])
    chart.add_data (data)
    metadata.save("chart", chart.get_url())
예제 #9
0
def _line_strip_graph(data,
                      legends,
                      axis_labels,
                      size,
                      steps,
                      type=SimpleLineChart,
                      multiline=False):
    if multiline:
        max_values = []
        min_values = []
        for row in data:
            max_values.append(max(row))
            min_values.append(min(row))
        max_y = max(max_values)
        min_y = min(min_values)
    else:
        max_y = max(data)
        min_y = min(data)

    #validando si hay datos para hacer grafico
    if max_y == 0:
        return None

    chart = SimpleLineChart(size[0], size[1], y_range=[0, max_y * 1.05])

    if multiline:
        for row in data:
            chart.add_data(row)
    else:
        chart.add_data(data)

    step = ((max_y * 1.05) - (min_y * 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

    try:
        left_axis = range(int(round(min_y * 0.95)), tope, int(step))
    except ValueError:
        #error por que los range no soportan decimales
        left_axis = range(0, 2)
    left_axis[0] = ''
    chart.set_axis_labels(Axis.LEFT, left_axis)
    chart.set_colours(
        ['FFBC13', '22A410', 'E6EC23', '2B2133', 'BD0915', '3D43BD'])

    chart.set_axis_labels(Axis.BOTTOM, axis_labels)
    chart.set_legend(legends)
    chart.set_legend_position('b')

    return chart
예제 #10
0
def simple_random():
    chart = SimpleLineChart(300, 100, y_range=(0, 100))
    max_y = 100
    list_data = [10, 90, 80, 10, 10, 20, 30, 20, 15, 45, 56, 42, 92]
    chart.add_data(list_data)
    chart.add_data(reversed(list_data))
    chart.set_axis_labels(Axis.LEFT, ['', max_y / 2, max_y])
    chart.set_axis_labels(Axis.BOTTOM, ['Sep', 'Oct', 'Nov', 'Dec'])
    chart.download('line-simple-random.png')
예제 #11
0
def get_chart_url(series):
    chart = SimpleLineChart(400, 200)

    chart.set_legend([name for (name, _) in series])
    chart.set_colours_within_series(colors[0:len(series)])

    for (_, data) in series:
        chart.add_data(data)

    return chart.get_url()
예제 #12
0
def graphURL(data):
    log("debut graphURL")
    log(str(data))
    # Set the vertical range from 0 to 100
    max_y = 100 * max(data) + 20
    # Chart size of 300x150 pixels and specifying the range for the Y axis
    log(str(max_y))
    try:
        chart = SimpleLineChart(300, 150, y_range=[0, max_y])
    except Exception, e:
        log(str(e))
예제 #13
0
def simpleChart(bottom_labels, data):
    # round min and max to nearest integers
    datamin = int(min(data) - 0.5)
    datamax = int(max(data) + 0.5)
    chart = SimpleLineChart(200, 125, y_range=[datamin, datamax])
    chart.add_data(data)

    left_axis = [datamin, 0, datamax]
    chart.set_axis_labels(Axis.LEFT, left_axis)
    chart.set_axis_labels(Axis.BOTTOM, bottom_labels)
    return chart
예제 #14
0
파일: labels.py 프로젝트: thqbop/nuvola
def many_labels():
    chart = SimpleLineChart(settings.width, settings.height)

    for a in range(3):
        for axis_type in (Axis.LEFT, Axis.RIGHT, Axis.BOTTOM):
            index = chart.set_axis_range(axis_type, 0, random.random() * 100)
            chart.set_axis_style(index, colour=helper.random_colour(), \
                font_size=random.random() * 10 + 5)

    chart.add_data(helper.random_data())
    chart.download('label-many.png')
예제 #15
0
def group_post_activity(request, group_slug):
    group = get_object_or_404(BaseGroup, slug=group_slug)

    postcount = []
    replycount = []
    allcount = []
    listdate = []
    thedate = date(date.today().year - 1, date.today().month, 1)
    skip = False
    while thedate.year != date.today().year or thedate.month != date.today(
    ).month:
        if thedate.month == 12:
            enddate = date(year=thedate.year + 1, month=1, day=1)
        else:
            enddate = date(year=thedate.year, month=thedate.month + 1, day=1)
        posts = GroupTopic.objects.filter(parent_group=group,
                                          created__range=(thedate,
                                                          enddate)).count()
        #replies = ThreadedComment.objects.filter(content_object__parent_group=group,
        #                                         date_submitted__range=(thedate, enddate)).count()
        replies = 0
        postcount.append(posts)
        replycount.append(replies)
        allcount.append(posts + replies)
        if not skip:
            listdate.append(thedate.strftime("%B %y"))
        else:
            listdate.append("")
        skip = not skip
        thedate = enddate

    postactivity = SimpleLineChart(
        600,
        450,
        y_range=(min(min(postcount), min(replycount)),
                 max(max(postcount), max(replycount)) + 1))
    postactivity.add_data(postcount)
    postactivity.add_data(replycount)
    postactivity.add_data(allcount)

    yaxis = range(min(min(postcount), min(replycount)),
                  max(max(postcount), max(replycount)) + 1, 1)
    if len(yaxis) < 2:
        yaxis.append(1)
    yaxis[0] = ''
    postactivity.set_axis_labels(Axis.LEFT, yaxis)
    postactivity.set_axis_labels(Axis.BOTTOM, listdate)

    postactivity.set_colours(['ff0000', '0000ff', '00ff00'])
    postactivity.set_legend(['posts', 'replies', 'total'])
    postactivity.set_legend_position('b')

    return postactivity.get_url()
예제 #16
0
    def _line(self, results):
        key = 'count'
        if self.request.GET.get('percentages') == 'true':
            key = 'percentage'
        counts = [x.get(key) for x in results]
        maxcount = max(counts)

        granularity = self.request.GET.get('granularity')
        times = [x.get(granularity) for x in results]

        width = int(self.request.GET.get('width', 575))
        height = int(self.request.GET.get('height', 300))
        chart = SimpleLineChart(width, height, y_range=(0, max(counts)))
        chart.add_data(counts)
        chart.set_line_style(0, thickness=2)  # Set line thickness
        chart.set_colours([
            'E0B300',
        ])
        chart.fill_solid('bg', '00000000')  # Make the background transparent
        chart.set_grid(0, 50, 2, 5)  # Set gridlines

        if self.request.GET.get('granularity') == 'month':
            months = [x['month'] for x in results]
            januaries = [x for x in months if x.endswith('01')]
            january_indexes = [months.index(x) for x in januaries]
            january_percentages = [
                int((x / float(len(months))) * 100) for x in january_indexes
            ]
            index = chart.set_axis_labels(Axis.BOTTOM,
                                          [x[:4] for x in januaries[::2]])
            chart.set_axis_positions(index,
                                     [x for x in january_percentages[::2]])

        if key == 'percentage':
            label = '%.4f' % maxcount
            label += '%'
        else:
            label = int(maxcount)
        index = chart.set_axis_labels(Axis.LEFT, [
            label,
        ])
        chart.set_axis_positions(index, [
            100,
        ])

        if self.request.GET.get('legend', 'true') != 'false':
            chart.set_legend([
                self.request.GET.get('phrase'),
            ])

        return chart.get_url()
예제 #17
0
def group_membership_activity(request, group_slug):
    group = get_object_or_404(BaseGroup, slug=group_slug)

    listcount = []
    listdate = []
    currentcount = group.member_users.all().count()
    thedate = date.today()
    skip = False
    while thedate.year != date.today().year - 1 or thedate.month != date.today(
    ).month:
        if thedate.month == 1:
            startdate = date(year=thedate.year - 1, month=12, day=1)
        else:
            startdate = date(year=thedate.year, month=thedate.month - 1, day=1)
        joins = GroupMemberRecord.objects.filter(
            group=group,
            membership_start=True,
            datetime__range=(startdate, thedate)).count()
        unsubs = GroupMemberRecord.objects.filter(
            group=group,
            membership_end=True,
            datetime__range=(startdate, thedate)).count()
        listcount.append(currentcount - joins + unsubs)
        if not skip:
            listdate.append(thedate.strftime("%B %y"))
        else:
            listdate.append("")
        skip = not skip
        thedate = startdate

    listcount.reverse()
    listdate.reverse()

    activity = SimpleLineChart(600,
                               450,
                               y_range=(min(listcount), max(listcount)))
    activity.add_data(listcount)

    yaxis = range(
        min(listcount),
        max(listcount) + 1,
        max(max(listcount) / 10,
            1))  # that last number should be 25 or 50.  but for testing...
    if len(yaxis) < 2:  # only for testing...
        yaxis.append(1)
    yaxis[0] = ''
    activity.set_axis_labels(Axis.LEFT, yaxis)
    activity.set_axis_labels(Axis.BOTTOM, listdate)

    return activity.get_url()
예제 #18
0
    def mk_chart(self):
        from pygooglechart import SimpleLineChart
        chart = SimpleLineChart(self.width,
                                self.height,
                                colours=('91CF60', 'FC8D59'))

        all_labels = [d[0] for d in self.cumulative]

        chart.add_data([d[1] for d in self.cumulative])
        chart.add_data([d[1] for d in self.newdata])
        chart.set_axis_labels('y', range(0, self.cmax, (self.cmax / 4)))
        chart.set_axis_labels('x', [
            all_labels[x]
            for x in range(0, len(all_labels), (len(all_labels) / 4))
        ])
        return chart
예제 #19
0
def simpleChart1(bottom_labels, data):
    # round min and max to nearest integers
    datamin = int(min(data) - 0.5)
    datamax = int(max(data) + 0.5)
    chart = SimpleLineChart(200, 125, y_range=[datamin, datamax])
    chart.add_data(data)

    left_axis = [datamin, 0, datamax]

    chart.set_axis_labels(Axis.LEFT, left_axis)
    chart.set_axis_labels(Axis.BOTTOM, bottom_labels)
    chart.set_axis_labels(Axis.BOTTOM,
                          ['X Axis'])  # second label below first one
    chart.set_axis_positions(
        2, [50.0])  # position, left is 0., right is 100., 50. is center
    return chart
예제 #20
0
파일: pchart.py 프로젝트: cyberyoung/sentry
def stripes():

    # Set the vertical range from 0 to 100
    max_y = 100

    # Chart size of 200x125 pixels and specifying the range for the Y axis
    chart = SimpleLineChart(600, 500, y_range=[0, max_y])

    # Add the chart data
    # data = [
    #     32, 34, 34, 32, 34, 34, 32, 32, 32, 34, 34, 32, 29, 29, 34, 34, 34, 37,
    #     37, 39, 42, 47, 50, 54, 57, 60, 60, 60, 60, 60, 60, 60, 62, 62, 60, 55,
    #     55, 52, 47, 44, 44, 40, 40, 37, 34, 34, 32, 32, 32, 31, 32
    # ]
    # data2 = [
    #     55, 52, 47, 44, 44, 40, 40, 37, 34, 34, 32, 32, 32, 31, 32, 62, 60, 55,
    #     32, 34, 34, 32, 34, 34, 32, 32, 32, 34, 34, 32, 29, 29, 34, 34, 34, 37,
    #     37, 39, 42, 47, 50, 54, 57, 60, 60, 60, 60, 60, 60, 60, 62
    # ]
    data = xrange(0, 100, 20)
    data2 = [0, 20, 20, 40, 40, 80, 80, 100, 100]
    chart.add_data(data)
    chart.add_data(data2)

    # Set the line colour to blue
    chart.set_colours(['0000FF', '00CC00'])

    # Set the vertical stripes
    chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2)

    # Set the horizontal dotted lines
    chart.set_grid(0, 25, 5, 5)

    # The Y axis labels contains 0 to 100 skipping every 25, but remove the
    # first number because it's obvious and gets in the way of the first X
    # label.
    left_axis = range(0, max_y + 1, 25)
    left_axis[0] = ''
    chart.set_axis_labels(Axis.LEFT, left_axis)

    # X axis labels
    chart.set_axis_labels(Axis.BOTTOM, \
        ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'])

    chart.download('line-stripes.png')
예제 #21
0
def linechart(name, dataset, size=(400,400)):
    max_y = maxy(dataset)
    chart = SimpleLineChart(size[0], size[1], y_range=[0, max_y])
    legend = []
    for series_name, s in dataset:
        chart.add_data([y for x, y in s])
        legend.append(series_name)
    
    chart.set_colours(['057D9F', '8106A9', 'E9FB00', 'FF8100'])
    chart.set_legend(legend)
    chart.set_grid(0, 25, 5, 5)
    
    left_axis = range(0, int(max_y + 1), 25)
    left_axis[0] = ''
    chart.set_axis_labels(Axis.LEFT, left_axis)
    
    bottom_axis = [x for x, y in dataset[0][1]]
    chart.set_axis_labels(Axis.BOTTOM, bottom_axis)
    chart.download(name)
예제 #22
0
파일: grafos.py 프로젝트: johnfelipe/sissan
def __line_strip_graphic__(data,
                           legends,
                           axis_labels,
                           size,
                           steps,
                           type=SimpleLineChart,
                           multiline=False):
    if multiline:
        max_values = []
        min_values = []
        for row in data:
            max_values.append(max(row))
            min_values.append(min(row))
        max_y = max(max_values)
        min_y = min(min_values)
    else:
        max_y = max(data)
        min_y = min(data)

    chart = SimpleLineChart(size[0], size[1], y_range=[0, max_y * 1.05])

    if multiline:
        for row in data:
            chart.add_data(row)
    else:
        chart.add_data(data)

    step = ((max_y * 1.05) - (min_y * 0.95)) / steps
    try:
        left_axis = range(int(min_y * 0.95), int(max_y * 1.05), int(step))
    except ValueError:
        #error por que los range no soportan decimales
        left_axis = range(0, 2)
    left_axis[0] = ''
    chart.set_axis_labels(Axis.LEFT, left_axis)
    chart.set_colours(
        ['FFBC13', '22A410', 'E6EC23', '2B2133', 'BD0915', '3D43BD'])

    chart.set_axis_labels(Axis.BOTTOM, axis_labels)
    chart.set_legend(legends)
    chart.set_legend_position('b')

    return chart
예제 #23
0
    def _plot_timeseries(self, options, args, fh):
        """Plot a timeseries graph"""
        from pygooglechart import Chart, SimpleLineChart, Axis

        delimiter = options.delimiter
        field = options.field - 1
        datefield = options.datefield - 1

        pts = []
        for l in imap(lambda x: x.strip(), fh):
            splitted_line = l.split(delimiter)
            v = float(splitted_line[field])
            t = datetime.strptime(splitted_line[datefield], options.dateformat)
            pts.append((t, v))

        if options.get('limit', None):
            # Only wanna use top (earliest) N samples by key, sort and truncate
            pts = sorted(pts, key=itemgetter(0), reverse=True)[:options.limit]

        if not pts:
            raise ValueError("No data to plot")

        max_y = int(max((v for t, v in pts)))
        chart = SimpleLineChart(options.width,
                                options.height,
                                y_range=[0, max_y])

        # Styling
        chart.set_colours(['0000FF'])
        chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2)
        chart.set_grid(0, 25, 5, 5)

        ts, vals = zip(*pts)
        chart.add_data(vals)

        # Axis labels
        chart.set_axis_labels(Axis.BOTTOM, ts)
        left_axis = range(0, max_y + 1, 25)
        left_axis[0] = ''
        chart.set_axis_labels(Axis.LEFT, left_axis)

        return chart
예제 #24
0
    def get(self):
        counters = tasks.Counter.all().fetch(10)

        rows = [{'name': c.key().name(), 'count': c.count} for c in counters]

        chart = SimpleLineChart(1000, 300)
        for counter in counters:
            query = counter.snapshots
            query.order('-date')
            snapshots = query.fetch(30)
            counts = [s.count for s in snapshots]
            dates = [s.date.strftime("%d/%m") for s in snapshots]
            for i in xrange(len(counts) - 1):
                counts[i] -= counts[i + 1]
            counts.reverse()
            dates.reverse()
            chart.add_data(counts[1:])

        chart.set_axis_labels(pygooglechart.Axis.BOTTOM, dates[1:])
        chart.set_axis_labels(pygooglechart.Axis.LEFT,
                              range(0,
                                    chart.data_y_range()[1], 5))

        hsv_colours = [(float(x) / 255, 1, 1)
                       for x in range(0, 255, 255 / len(counters))]
        rgb_colours = [colorsys.hsv_to_rgb(*x) for x in hsv_colours]
        hex_colours = [
            '%02x%02x%02x' %
            (int(x[0] * 255), int(x[1] * 255), int(x[2] * 255))
            for x in rgb_colours
        ]

        chart.set_colours(hex_colours)
        chart.set_legend([c.key().name() for c in counters])

        path = os.path.join(os.path.dirname(__file__), self.TEMPLATE)
        self.response.out.write(
            template.render(path, {
                'url': chart.get_url(),
                'counters': rows
            }))
예제 #25
0
def users(*args):
    days = 60
    from django.db import connection
    cursor = connection.cursor()
    cursor.execute(
        "SELECT date_joined, COUNT(*) from auth_user where date_joined > NOW() - INTERVAL %i DAY group by DATE(date_joined) order by DATE(date_joined) desc"
        % days)

    data = {}
    max_y = 0
    for dt, num in cursor.fetchall():
        if num > max_y:
            max_y = num
        data[dt.date()] = num

    data2 = []

    dt = date.today() - timedelta(days - 1)
    for i in xrange(days):
        data2.append((dt, data.get(dt, 0)))
        dt = dt + timedelta(1)

    chart = SimpleLineChart(800, 125, y_range=[0, max_y])
    chart.add_data([row[1] for row in data2])
    chart.set_colours(['0000FF'])

    ticks = (max_y % 25) + 1

    left_axis = range(0, max_y, 25)
    left_axis[0] = ''
    chart.set_axis_labels(Axis.RIGHT, left_axis)

    bottom_axis = [
        dt[0].strftime("%b") if dt[0].day == 1 else '' for dt in data2
    ]
    chart.set_axis_labels(Axis.BOTTOM, bottom_axis)

    chart.set_title("Daily Registrations")

    data2.reverse()
    return chart
예제 #26
0
    def linegraph(self, days, bars, output, title=""):
        data = []
        min_count = 0
        max_count = 0
        date = lambda i: datetime.date.today() + datetime.timedelta(-days + i)

        for i in range(0, days + 1):
            count = bars[date(i)]
            max_count = max(count, max_count)
            min_count = min(count, min_count)
            data.append(count)
        chart = SimpleLineChart(800, 350, y_range=[min_count, 60000])
        chart.add_data(data)
        # Set the line colour to blue
        chart.set_colours(['0000FF'])

        # Set the vertical stripes
        d = max(1 / float(days), round(7 / float(days), 2))
        chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', d, 'FFFFFF', d)

        fmt = "%d/%m"
        chart.set_axis_labels(Axis.BOTTOM, \
                              [date(i).strftime(fmt) for i in range(0,days,7)])

        # Set the horizontal dotted lines
        chart.set_grid(0, 25, 5, 5)

        # The Y axis labels contains 0 to 100 skipping every 25, but remove the
        # first number because it's obvious and gets in the way of the first X
        # label.
        delta = float(max_count - min_count) / 100
        skip = int(delta) / 5 * 100
        left_axis = range(0, 60000 + 1, skip)
        left_axis[0] = ''
        chart.set_axis_labels(Axis.LEFT, left_axis)

        if len(title) > 0:
            chart.set_title(title % days)

        chart.download(output)
예제 #27
0
def history(message):
	try:
		splitted_text = re.search(r'[a-zA-Z]{3}/[a-zA-Z]{3}', message.text).group().split('/')
		base = splitted_text[0].upper()
		symbols = splitted_text[1].upper()
		start = str(date.today() - timedelta(days=7))
		end = str(date.today())
		data = requests.get(
			'https://api.exchangeratesapi.io/history?start_at='+start+'&end_at='+end+'&base='+base+'&symbols='+symbols
		)
		data = data.json()
		chart = SimpleLineChart(700, 400)
		
		chart_data = []
		# using collections.OrderedDict to sort incoming data
		for i in collections.OrderedDict(sorted(data['rates'].items())):
			chart_data.append(round(data['rates'][i][symbols], 2))
		chart.add_data(chart_data)
		print(collections.OrderedDict(sorted(data['rates'].items())))
		# Set the line colour
		chart.set_colours(['0000FF'])
		left_axis= list(
			range(
				round(min(chart_data)),
				round(max(chart_data)+1),
				round(sum(chart_data)/len(chart_data))
			)
		)
		chart.set_axis_labels(Axis.LEFT, left_axis)

		x_labels = []
		# using collections.OrderedDict to sort incoming data
		for i in collections.OrderedDict(sorted(data['rates'].items())):
			x_labels.append(i)
		chart.set_axis_labels(Axis.BOTTOM, x_labels)
		print(chart.get_url())
		bot.send_photo(message.chat.id, chart.get_url())
	except:
		bot.send_message(message.chat.id, 'No exchange rate data is available for the selected currency.')
예제 #28
0
def cat_proximity():
    """Cat proximity graph from http://xkcd.com/231/"""
    chart = SimpleLineChart(int(settings.width * 1.5), settings.height)
    chart.set_legend(['INTELLIGENCE', 'INSANITY OF STATEMENTS'])

    # intelligence
    data_index = chart.add_data([100. / y for y in xrange(1, 15)])

    # insanity of statements
    chart.add_data([100. - 100 / y for y in xrange(1, 15)])

    # line colours
    chart.set_colours(['208020', '202080'])

    # "Near" and "Far" labels, they are placed automatically at either ends.
    near_far_axis_index = chart.set_axis_labels(Axis.BOTTOM, ['FAR', 'NEAR'])

    # "Human Proximity to cat" label. Aligned to the center.
    index = chart.set_axis_labels(Axis.BOTTOM, ['HUMAN PROXIMITY TO CAT'])
    chart.set_axis_style(index, '202020', font_size=10, alignment=0)
    chart.set_axis_positions(index, [50])

    chart.download('label-cat-proximity.png')
예제 #29
0
def draw_plot(data, generation):
    # Set the vertical range from 0 to 100
    max_y = data[0]

    # Chart size of 200x125 pixels and specifying the range for the Y axis
    chart = SimpleLineChart(600, 325, y_range=[0, max_y])

    # Add the chart data
    """
	data = [
	    32, 34, 34, 32, 34, 34, 32, 32, 32, 34, 34, 32, 29, 29, 34, 34, 34, 37,
	    37, 39, 42, 47, 50, 54, 57, 60, 60, 60, 60, 60, 60, 60, 62, 62, 60, 55,
	    55, 52, 47, 44, 44, 40, 40, 37, 0,0,0,0,0,0,0
	]
	"""
    chart.add_data(data)

    # Set the line colour to blue
    chart.set_colours(['0000FF'])

    # Set the vertical stripes
    chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2)

    # Set the horizontal dotted lines
    chart.set_grid(0, 25, 5, 5)

    # The Y axis labels contains 0 to 100 skipping every 25, but remove the
    # first number because it's obvious and gets in the way of the first X
    # label.
    left_axis = range(0, max_y + 1, 25)
    left_axis[0] = ''
    chart.set_axis_labels(Axis.LEFT, left_axis)

    # X axis labels
    chart.set_axis_labels(Axis.BOTTOM,
                          [str(x) for x in xrange(1, generation + 1)][::14])
    chart.download('plot.png')
예제 #30
0
def fill():

    # Set the vertical range from 0 to 50
    max_y = 50
    chart = SimpleLineChart(200, 125, y_range=[0, max_y])

    # First value is the highest Y value. Two of them are needed to be
    # plottable.
    #chart.add_data([max_y] * 2)

    # 3 sets of real data
    chart.add_data([0, 28, None,None])
    chart.add_data([None, 28, 18,None])
    chart.add_data([None, None, 18,30])

    # Last value is the lowest in the Y axis.
    #chart.add_data([0] * 2)

    # Black lines
    chart.set_colours(["ffc900","d60000","8fb800","d60000","8fb800"])

    # Filled colours
    # from the top to the first real data
    #chart.add_fill_range('76A4FB', 0, 1)

    # Between the 3 data values
    #chart.add_fill_range('224499', 1, 2)
    #chart.add_fill_range('FF0000', 2, 3)

    # from the last real data to the
    #chart.add_fill_range('80C65A', 3, 4)

    # Some axis data
    chart.set_axis_labels(Axis.LEFT, ['', max_y / 2, max_y])
    chart.set_axis_labels(Axis.BOTTOM, ['Sep', 'Oct', 'Nov', 'Dec'])

    chart.download('line-fill.png')